如果其他人在等待,是否有标准的STL或QT方法可以产生互惠码,否则请保留它

Is there a standard STL or Qt way to yield a mutex if someone else is waiting, otherwise keep it?

本文关键字:保留 方法 是否 在等待 其他人 标准 如果 QT STL      更新时间:2023-10-16

在我的工作线程中,最方便的外循环逻辑将为

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<>可能有效,但我认为您可能会在这里思考过多 - 更简单,更易于验证的工作方法将使您的工作线程将是:

while(not done)
{
   lock_mutex();
   do_some_work();
   unlock_mutex();
}

这将允许其他线程在当前拨打DO_SOME_WORK((的呼叫后立即获得Mutex的所有权。

如果您担心这会引入额外的锁定和解锁静音,请不要 - 如今,静音非常优化,而且他们的lock_mutex((和unlock_mutex((操作不太可能更多比您的check_if_someone_is_waiting((功能昂贵。