1

这个关于条件变量的 boost 示例表明互斥锁不必在调用cond.notify_one(). 这是否意味着这boost::condition_variable是线程安全的?即如果“准备数据”线程释放互斥锁并尝试调用cond.notify_one(),而另一个线程现在获取释放的互斥锁并同时尝试调用会发生cond.wait(...)什么?

4

1 回答 1

2

该示例并不意味着这boost::condition_variable是线程安全的。尽管如此,、 、waitwait_for是线程 安全的成员函数。wait_untilnotify_onenotify_all

Boost.Thread 记录了其对 C++11 标准线程库的一致性和扩展。它列出了条件变量、Classcondition_variable和 Classcondition_variable_any以符合要求。

标准的相关部分(§ 30.5-2)规定:

条件变量允许同时调用、waitwait_forwait_until成员函数。notify_onenotify_all

于 2013-04-08T04:24:45.350 回答