summaryrefslogtreecommitdiff
path: root/examples/libc
diff options
context:
space:
mode:
author[email protected] <[email protected]>2010-11-24 00:04:33 +0000
committer[email protected] <[email protected]>2010-11-24 00:04:33 +0000
commitc2caac7e732f96efc320e0333fb5430355dec42d (patch)
treeb90f6b2b4d30637e8fcaa24286f5c9de62f76a57 /examples/libc
parent1b014359b07799cf77a3045b78b285ffbb9b12b6 (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/libc')
-rw-r--r--examples/libc/sem.c65
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);