美文网首页
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