zoukankan      html  css  js  c++  java
  • 消息队列--线程安全

    为什么在互斥量的基础上还需要加条件变量?

    可参考链接:https://www.jianshu.com/p/01ad36b91d39

    需要注意的是

    #include <pthread.h>

    int pthread_cond_wait(pthread_cond_t *cv, pthread_mutex_t *mutex);

    返回值:函数成功返回0;任何其他返回值都表示错误

    函数将解锁mutex参数指向的互斥锁,并使当前线程阻塞在cv参数指向的条件变量上。

    被阻塞的线程可以被pthread_cond_signal函数,pthread_cond_broadcast函数唤醒,也可能在被信号中断后被唤醒。

    pthread_cond_wait函数的返回并不意味着条件的值一定发生了变化,必须重新检查条件的值。

    pthread_cond_wait函数返回时,相应的互斥锁将被当前线程锁定,即使是函数出错返回。 即无论返回结果如何都会重新对互斥量加锁

    为什么要与pthread_mutex 一起使用呢?

    答:在thread 1 call pthread_cond_wait() 的时刻到 thread 1真正进入 wait 状态时,是存在着时间差的。如果在这段时间差内 thread2 调用了 pthread_cond_signal() 那这个 signal 信号就丢失了。给 wait 加锁可以防止同时有另一个线程在 signal。

    为了应对 线程1在调用pthread_cond_wait()但线程1还没有进入wait cond的状态的时候,此时线程2调用了 cond_singal 的情况。 如果不用mutex锁的话,这个cond_singal就丢失了。加了锁的情况是,线程2必须等到 mutex 被释放(也就是 pthread_cod_wait() 释放锁并进入wait_cond状态 ,此时线程2上锁) 的时候才能调用cond_singal.

     




  • 相关阅读:
    本地项目上传到github
    linux 常用命令
    mysql 查询日志基本操作
    js 短信60秒倒计时
    windows下 mysql 移库
    INSERT INTO table(xxx) VALUES (xxx)
    springboot 项目接口调用失败
    P1093 奖学金
    P1403约数研究
    P1147连续自然数和
  • 原文地址:https://www.cnblogs.com/lthuang/p/12097886.html
Copyright © 2011-2022 走看看