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.

     




  • 相关阅读:
    asp.net 导出excel的一种方法
    微软通过.NET Native为Windows Store应用提速
    .NET基金会成立
    XDomainRequest object
    转 web.config设置之system.webServer 详细介绍,为网站设置默认文档
    P·C·L 了解
    无法对 数据库'XXXXX' 执行 删除,因为它正用于复制
    web性能优化
    web 分享代码片段
    Microsoft OWIN
  • 原文地址:https://www.cnblogs.com/lthuang/p/12097886.html
Copyright © 2011-2022 走看看