pthread_mutex_t是一个互斥量
互斥量:只有两种值0/1 被访问/未被访问
pthread_cond_t是来wait 和 wakeup的
现代操作系统中的 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | #include <stdio.h> #include <pthread.h> #include <stdlib.h> #define MAX 1000000000 pthread_mutex_t the_mutex; pthread_cond_t condc,condp; int buffer = 0;// 缓冲区 void *Producer(void *ptr) { for(int i = 0;i<=MAX;i++) { pthread_mutex_lock(&the_mutex); while(buffer!=0)pthread_cond_wait(&condp,&the_mutex); buffer = i; printf("Producer %d",buffer); pthread_cond_signal(&condc);//唤醒消费者 pthread_mutex_unlock(&the_mutex); } pthread_exit(0); } void *Consumer(void *ptr) { for(int i =0 ;i<=MAX;i++) { pthread_mutex_lock(&the_mutex); while(buffer ==0 ) pthread_cond_wait(&condc,&the_mutex); buffer = 0; printf("Consumer %d",buffer); pthread_cond_signal(&condp); pthread_mutex_unlock(&the_mutex); } pthread_exit(0); } int main(void) { pthread_t pro,con; pthread_mutex_init(&the_mutex,0); pthread_cond_init(&condc,0); pthread_cond_init(&condp,0); pthread_create(&con,0,Consumer,0); pthread_create(&pro,0,Producer,0); pthread_join(pro,0); pthread_join(con,0); pthread_cond_destroy(&condc); pthread_cond_destroy(&condp); pthread_mutex_destroy(&the_mutex); } |