美文网首页
pthread中mutex和cond的配合使用

pthread中mutex和cond的配合使用

作者: Freboat | 来源:发表于2018-06-11 13:28 被阅读0次

典型的生产者,消费者多线程并发模型中,cond一般要和mutex配合使用,如下:

1.生产者:
pthread_mutex_lock(&mutex);
//set full
pthread_cond_signal(&cond);         //通知消费者可以行动了
pthread_mutex_unlock(&mutex);

2.消费者:
pthread_mutex_lock(&mutex);
while(empty)  pthread_cond_wait(&cond,&mutex);//消费者必须等待生产者,为啥要带锁等待?
pthread_mutex_unlock(&mutex);

wait要带锁是因为wait内部会首先unlock才开始阻塞等待,因为只有unlock,生产者才能
lock并进行生产,继而唤醒消费者,
消费者被唤醒后在wait内会重新lock(mutex)

signal唤醒一个,broadcast唤醒所有消费者,最后在持有mutex的情况下调用,否则有可能signal还未完成,消费者就直接进入临界区。

因此在wait函数内实行了unlock和重新lock,但对外展现的是一直lock的逻辑

wait函数最后放在while循环中等待,是因为有可能被别的消费者抢先消费了

相关文章

网友评论

      本文标题:pthread中mutex和cond的配合使用

      本文链接:https://www.haomeiwen.com/subject/iszceftx.html