《linux c++服务端编程》中条件变量的一个思考

你看,cond.wait() 在等 !queue.empty(),即「队列非空」,那么:
每次 enqueue 操作都能使队列非空只有 enqueue 以后队列中存在一个元素,才能使队列非空显然前者是正确的,后者是荒谬的。类似的问题,很多情况下,连条件变量的原理都不需要考虑,单从逻辑上,就能解释了。
---
【《linux c++服务端编程》中条件变量的一个思考】 感觉这就像个程序员笑话:
两个程序员进了自助餐厅,鸡翅那边因为畅销所以暂时没有库存。A:我先去上个厕所,你帮我看着点鸡翅啊,吧台上只要有一份就赶紧帮我拿下。B:好嘞!(十分钟后,A 回来了)A:卧槽,这么久了怎么还没去拿?……你看那边不是有两份没人拿么?B:对啊,那是两份啊。A:……
■网友
书第42页提出这个问题的地方有一个脚注,你打开脚注给的链接就知道答案了。发布一个 Linux 下的 C++ 多线程库
■网友
如果有有两个线程在wait,那么连续enqueue可能只会唤醒一个等待线程
■网友
会发生starvation 因为下一次的push和notify顺序不确定 若是连续快速发生2次或以上的push而只有一次notify则会有饿死发生


    推荐阅读