【发布时间】:2013-04-01 11:54:10
【问题描述】:
我的代码中存在与使用条件变量相关的死锁问题。这更像是一个设计问题,而不是纯代码问题。一旦我理解了正确的设计,我实际上编写代码就没有问题了。我有以下情况:
- 线程 A 等待条件变量。
- 线程 B 调用 notify_all,线程 A 被唤醒。
这当然是我想要发生的事情,也是当一切按预期工作时会发生的事情。但有时,我会得到以下情况:
- 线程 A 在开始等待条件变量之前执行代码。
- 线程 B 调用 notify_all,认为线程 A 正在等待。
- 线程 A 开始等待条件变量,没有意识到线程 B 已经告诉它停止等待。死锁。
解决此问题的最佳方法是什么?我想不出一种可靠的方法来检查线程 A 是否真的在等待,以便知道我什么时候应该在线程 B 中调用 notify_all。我必须求助于 timed_lock 吗?我不愿意。
【问题讨论】:
-
你用的是什么库?什么操作系统?
标签: c++ multithreading synchronization