1 #include <stdio.h> 2 #include <pthread.h> 3 #include <semaphore.h> 4 5 #define UPBOUND 100 6 7 sem_t sem1; 8 sem_t sem2; 9 10 //int i=0; 11 12 void *threadfunc1(void *p) 13 { 14 int i=0; 15 while(i<100) 16 { 17 sem_wait(&sem1); 18 i++; 19 printf("111 thread i is %d\n",i); 20 sem_post(&sem2); 21 } 22 return NULL; 23 } 24 25 26 void *threadfunc2(void *p) 27 { 28 int i=0; 29 while(i<100) 30 { 31 sem_wait(&sem2); 32 i++; 33 printf("222 thread i is %d\n",i); 34 sem_post(&sem1); 35 } 36 return NULL; 37 } 38 39 int main() 40 { 41 sem_init(&sem1, 0, 1); //线程间共享,初值为1 42 sem_init(&sem2, 0, 0); 43 44 pthread_t tid1=0, tid2=0; 45 46 pthread_create(&tid1,NULL,&threadfunc1,NULL); 47 pthread_create(&tid2,NULL,&threadfunc2,NULL); 48 49 pthread_join(tid1,NULL); 50 pthread_join(tid2,NULL); 51 52 sem_destroy(&sem1); 53 sem_destroy(&sem2); 54 55 return 0; 56 }