zoukankan      html  css  js  c++  java
  • 重读APUE(15)-pthread_cond_wait与while循环

    即使pthead_cond_wait()和pthread_cond_timewait()没有错误返回,等待的条件也可能是假的;即使pthread_cond_timewait()返回了超时错误,关联的条件也可能是真的;因为超时和条件改变之间有时间窗口;

    在有些实现中,特别是多处理器环境,信号唤醒可能会同时唤醒多个处理器上的多个线程;

    通常,不管pthread_cond_wait()返回什么,都要对条件进行重新判断,以确定下一步动作,或者继续执行,或者继续等待;

    因此,推荐使用while循环来对等待条件进行检查;

    以下是pthread_cond_wait的man手册内容截取;

    It is important to note that when pthread_cond_wait() and pthread_cond_timedwait() return without error, the associated predicate may still be false. Sim‐
    ilarly, when pthread_cond_timedwait() returns with the timeout error, the associated predicate may be true due to an unavoidable race between the expira‐
    tion of the timeout and the predicate state change.

    Some implementations, particularly on a multi-processor, may sometimes cause multiple threads to wake up when the condition variable is signaled simulta‐
    neously on different processors.

    In general, whenever a condition wait returns, the thread has to re-evaluate the predicate associated with the condition wait to determine whether it can
    safely proceed, should wait again, or should declare a timeout. A return from the wait does not imply that the associated predicate is either true or false.

    It is thus recommended that a condition wait be enclosed in the equivalent of a “while loop” that checks the predicate.

  • 相关阅读:
    遗传算法-目标函数与适应度函数变换
    遗传算法-编码
    Python 绘制甘特图
    fiddler抓包
    使用msf查询补丁和可利用提权漏洞
    Shodan入坑指南
    python 项目自动生成requirements.txt文件
    Tomcat 基于端口的虚拟主机配置
    python简单搭建http server
    metasploit后渗透 之 portfwd端口重定向
  • 原文地址:https://www.cnblogs.com/wanpengcoder/p/11764904.html
Copyright © 2011-2022 走看看