如何在此条件中使用lock_guard

Ano*_*ity 1 c++ multithreading

线程具有以下控制流程:

mutex.lock()
if (condition) {
    // do synced things
    mutex.unlock();
    // do parallel things
} else {
    // do other synced things
    mutex.unlock();
    // do other parallel things
}
Run Code Online (Sandbox Code Playgroud)

注意这四个do部分如何执行不同的事情.

如何将直接调用替换为锁定和解锁std::lock_guard而改为使用?

Fle*_*exo 6

std::unique_lock看起来像你在寻找什么.语义类似于std::lock_guard,但允许更复杂的结构.因此,在您的情况下,您仍然可以获得异常安全性,但也可以提前明确解锁.就像是:

std::unique_lock<decltype(mutex)> guard(mutex); // calls mutex.lock() like lock_guard
if (condition) {
    // do synced things
    guard.unlock();
    // do parallel things
} else {
    // do other synced things
    guard.unlock();
    // do other parallel things
}
// unlocks on leaving scope, if held similar to lock_guard
Run Code Online (Sandbox Code Playgroud)