在我的工作线程中,最方便的外部循环逻辑是
id: 1
主线程
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);
我使用C ++ 11和Qt 5.我应该如何实现它?
答案 0 :(得分:0)
超级建议使用std :: atomic_int<>可能会有用,但我认为你可能会在这里过分思考 - 对你的工作线程来说,这是一个更简单,更容易验证的方法:
while(not done)
{
lock_mutex();
do_some_work();
unlock_mutex();
}
一旦当前对do_some_work()的调用返回,这将允许其他线程获得互斥锁的所有权。
如果您担心这会引入额外的锁定和解锁互斥锁,那么这些天来,互斥锁是非常优化的,并且它们的lock_mutex()不太可能和unlock_mutex()操作比check_if_someone_is_waiting()功能更昂贵。