c++建立四個程序輪流列印BACDBACD(利用鎖)
阿新 • • 發佈:2018-12-11
#include<stdio.h> #include<pthread.h> #include<semaphore.h> pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER; pthread_cond_t cond=PTHREAD_COND_INITIALIZER; int set=0; void* fun1(void* arg) { pthread_mutex_lock(&mutex); while(set!=1) pthread_cond_wait(&cond,&mutex); set=2; printf("A\n"); pthread_cond_broadcast(&cond); pthread_mutex_unlock(&mutex); } void* fun2(void* arg) { pthread_mutex_lock(&mutex); while(set!=0) pthread_cond_wait(&cond,&mutex); set=1; printf("B\n"); pthread_cond_broadcast(&cond); pthread_mutex_unlock(&mutex); } void* fun3(void* arg) { pthread_mutex_lock(&mutex); while(set!=2) pthread_cond_wait(&cond,&mutex); set=3; printf("C\n"); pthread_cond_broadcast(&cond); pthread_mutex_unlock(&mutex); } void* fun4(void* arg) { pthread_mutex_lock(&mutex); while(set!=3) pthread_cond_wait(&cond,&mutex); set=0; printf("D\n"); pthread_cond_broadcast(&cond); pthread_mutex_unlock(&mutex); } int main() { pthread_t tid[4]; pthread_create(tid+0,NULL,fun1,NULL); pthread_create(tid+1,NULL,fun2,NULL); pthread_create(tid+2,NULL,fun3,NULL); pthread_create(tid+3,NULL,fun4,NULL); int i=0; for(i=0;i<4;i++) pthread_join(tid[i],NULL); pthread_mutex_destroy(&mutex); pthread_cond_destroy(&cond); }