www.pudn.com > mult_thread.rar > sem_syn.c
#include#include #include #include #include #include #include int lock_var; time_t end_time; sem_t sem1,sem2; void pthread1(void *arg); void pthread2(void *arg); int main(int argc, char *argv[]) { pthread_t id1,id2; pthread_t mon_th_id; int ret; end_time = time(NULL)+30; ret=sem_init(&sem1,0,1); ret=sem_init(&sem2,0,0); if(ret!=0) { perror("sem_init"); } ret=pthread_create(&id1,NULL,(void *)pthread1, NULL); if(ret!=0) perror("pthread cread1"); ret=pthread_create(&id2,NULL,(void *)pthread2, NULL); if(ret!=0) perror("pthread cread2"); pthread_join(id1,NULL); pthread_join(id2,NULL); exit(0); } void pthread1(void *arg) { int i; while(time(NULL) < end_time){ sem_wait(&sem2); for(i=0;i<2;i++){ sleep(1); lock_var++; printf("lock_var=%d\n",lock_var); } printf("pthread1:lock_var=%d\n",lock_var); sem_post(&sem1); sleep(1); } } void pthread2(void *arg) { int nolock=0; int ret; while(time(NULL) < end_time){ sem_wait(&sem1); printf("pthread2:pthread1 got lock;lock_var=%d\n",lock_var); sem_post(&sem2); sleep(3); } }