diff options
| author | [email protected] <[email protected]> | 2010-11-24 00:04:33 +0000 |
|---|---|---|
| committer | [email protected] <[email protected]> | 2010-11-24 00:04:33 +0000 |
| commit | c2caac7e732f96efc320e0333fb5430355dec42d (patch) | |
| tree | b90f6b2b4d30637e8fcaa24286f5c9de62f76a57 /examples | |
| parent | 1b014359b07799cf77a3045b78b285ffbb9b12b6 (diff) | |
add posix semaphore test.
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1104 bbd45198-f89e-11dd-88c7-29a3b14d5316
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/libc/sem.c | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/examples/libc/sem.c b/examples/libc/sem.c new file mode 100644 index 0000000000..9686119059 --- /dev/null +++ b/examples/libc/sem.c @@ -0,0 +1,65 @@ +#include <pthread.h>
+#include <semaphore.h>
+#include <stdio.h>
+
+static sem_t sema;
+static void* other_thread()
+{
+ printf("other_thread here!\n");
+
+ sleep(1);
+
+ while (1)
+ {
+ printf("other_thread: sem_post...\n");
+ if(sem_post(&sema) == -1)
+ printf("sem_post failed\n");
+ sleep(1);
+ }
+
+ printf("other_thread dies!\n");
+ pthread_exit(0);
+}
+
+static void test_thread(void* parameter)
+{
+ pthread_t tid;
+
+ printf("main thread here!\n");
+ printf("sleep 5 seconds...");
+ sleep(5);
+ printf("done\n");
+
+ sem_init(&sema, 0, 0);
+
+ /* create the "other" thread */
+ if(pthread_create(&tid, 0, &other_thread, 0)!=0)
+ /* error */
+ printf("pthread_create OtherThread failed.\n");
+ else
+ printf("created OtherThread=%x\n", tid);
+
+ /* let the other thread run */
+ while (1)
+ {
+ printf("Main: sem_wait...\n");
+ if(sem_wait(&sema) == -1)
+ printf("sem_wait failed\n");
+ printf("Main back.\n\n");
+ }
+
+ pthread_exit(0);
+}
+#include <finsh.h>
+void libc_sem()
+{
+ rt_thread_t tid;
+
+ tid = rt_thread_create("semtest", test_thread, RT_NULL,
+ 2048, 20, 5);
+ if (tid != RT_NULL)
+ {
+ rt_thread_startup(tid);
+ }
+}
+FINSH_FUNCTION_EXPORT(libc_sem, posix semaphore test);
|
