1*10465441SEvalZero #include <pthread.h>
2*10465441SEvalZero #include <semaphore.h>
3*10465441SEvalZero #include <stdio.h>
4*10465441SEvalZero
5*10465441SEvalZero static sem_t sema;
other_thread()6*10465441SEvalZero static void* other_thread()
7*10465441SEvalZero {
8*10465441SEvalZero printf("other_thread here!\n");
9*10465441SEvalZero
10*10465441SEvalZero sleep(1);
11*10465441SEvalZero
12*10465441SEvalZero while (1)
13*10465441SEvalZero {
14*10465441SEvalZero printf("other_thread: sem_post...\n");
15*10465441SEvalZero if(sem_post(&sema) == -1)
16*10465441SEvalZero printf("sem_post failed\n");
17*10465441SEvalZero sleep(1);
18*10465441SEvalZero }
19*10465441SEvalZero
20*10465441SEvalZero printf("other_thread dies!\n");
21*10465441SEvalZero pthread_exit(0);
22*10465441SEvalZero }
23*10465441SEvalZero
test_thread(void * parameter)24*10465441SEvalZero static void test_thread(void* parameter)
25*10465441SEvalZero {
26*10465441SEvalZero pthread_t tid;
27*10465441SEvalZero
28*10465441SEvalZero printf("main thread here!\n");
29*10465441SEvalZero printf("sleep 5 seconds...");
30*10465441SEvalZero sleep(5);
31*10465441SEvalZero printf("done\n");
32*10465441SEvalZero
33*10465441SEvalZero sem_init(&sema, 0, 0);
34*10465441SEvalZero
35*10465441SEvalZero /* create the "other" thread */
36*10465441SEvalZero if(pthread_create(&tid, 0, &other_thread, 0)!=0)
37*10465441SEvalZero /* error */
38*10465441SEvalZero printf("pthread_create OtherThread failed.\n");
39*10465441SEvalZero else
40*10465441SEvalZero printf("created OtherThread=%x\n", tid);
41*10465441SEvalZero
42*10465441SEvalZero /* let the other thread run */
43*10465441SEvalZero while (1)
44*10465441SEvalZero {
45*10465441SEvalZero printf("Main: sem_wait...\n");
46*10465441SEvalZero if(sem_wait(&sema) == -1)
47*10465441SEvalZero printf("sem_wait failed\n");
48*10465441SEvalZero printf("Main back.\n\n");
49*10465441SEvalZero }
50*10465441SEvalZero
51*10465441SEvalZero pthread_exit(0);
52*10465441SEvalZero }
53*10465441SEvalZero #include <finsh.h>
libc_sem()54*10465441SEvalZero void libc_sem()
55*10465441SEvalZero {
56*10465441SEvalZero rt_thread_t tid;
57*10465441SEvalZero
58*10465441SEvalZero tid = rt_thread_create("semtest", test_thread, RT_NULL,
59*10465441SEvalZero 2048, 20, 5);
60*10465441SEvalZero if (tid != RT_NULL)
61*10465441SEvalZero {
62*10465441SEvalZero rt_thread_startup(tid);
63*10465441SEvalZero }
64*10465441SEvalZero }
65*10465441SEvalZero FINSH_FUNCTION_EXPORT(libc_sem, posix semaphore test);
66