【发布时间】:2017-02-14 03:24:27
【问题描述】:
在我的程序中,我有一个互斥体和两个线程。这些线程之一经常获取锁。另一个线程尝试获取但必须永远等待。
会不会是锁在释放之后很快就被获取了,以至于其他线程没有机会?互斥锁总是给每个人机会吗?如果没有,什么是好的解决方案?(某种 FIFO 锁?)
我正在使用 std::mutex 和 std::lock_guard
问题扩展 seccpur 指出 std::condition_variable 可以解决这个问题。三个线程如何扩展? std::condition_variable 是否确保每个线程都转一圈?假设你使用 notify_one()。
【问题讨论】:
-
条件变量在你的情况下应该可以正常工作
-
你在使用 std::mutex 和 std::lock_guard 吗? std::condition_variable?很高兴看到一些代码。
-
我正在使用 std::mutex 和 std::lock_guard。
-
@seccpur condition_variable 如何使用三个线程进行扩展?会不会是两个线程一起饿死了第三个线程?
-
@AartStuurman:使用 notify_all 广播到多个线程