在我的工作线程中,最方便的外循环逻辑是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和Qt5。我应该如何实现呢? 最佳答案 super推荐使用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()功能可以。关于c++ - 如果有人在等待,是否有标准的STL或Qt方式产生互斥体,否则保留它?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48814370/
10-12 05:48