#include <pthread.h> #include <semaphore.h> #include <unistd.h> #include <stdio.h> sem_t sem1,sem2; void func1(char * string){ int i = 0; while(i<100){ sem_wait(&sem1); printf("%s\n",string); i++; sem_post(&sem2);
//因为sem2 在 fun2里面被用掉了,并没有post。
//等fun1输出完成之后,再post,fun2就wait到了sem2,确保了fun1和fun2能交替运行
} } void func2(char * string){ int i = 0; while(i<100){ sem_wait(&sem2); printf("%s\n",string); i++; sem_post(&sem1); } } int main(){ sem_init(&sem1,0,1); sem_init(&sem2,0,1); pthread_t tid1,tid2; pthread_create(&tid1,NULL,(void *)func1,"In A Thread!"); pthread_create(&tid2,NULL,(void *)func2,"In B Thread!"); pthread_join(tid1,NULL); pthread_join(tid2,NULL); }