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而改为使用?
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)