【发布时间】:2023-12-19 11:03:02
【问题描述】:
在我的工作线程中,最方便的外循环逻辑是
lock (mutex_foo);
while (not done)
{
do_some_work ();
if (someone_is_waiting_for (mutex_foo))
{
unlock (mutex_foo);
wait_until_someone_else_locks (mutex_foo);
// expect this lock to already be taken,
// this thread will now wait its turn
lock (mutex_foo);
}
}
unlock (mutex_foo);
主线程
while (not_done)
{
do_stuff ();
lock (mutex_foo); // this will interrupt the worker thread's main loop
use_shared_resource ();
unlock (mutex_foo);
}
我使用 C++11 和 Qt 5。我应该如何实现?
【问题讨论】:
-
您可以将
std::atomic<int>与互斥锁一起存储,在尝试锁定互斥锁之前增加它,在解锁时减少它。然后您可以检查该值是否为> 1并且您知道其他人在等待。
标签: c++ multithreading c++11 stl mutex