【发布时间】:2016-11-29 03:35:33
【问题描述】:
一个线程有以下控制流:
mutex.lock()
if (condition) {
// do synced things
mutex.unlock();
// do parallel things
} else {
// do other synced things
mutex.unlock();
// do other parallel things
}
注意四个do 部分如何执行不同的事情。
如何将直接调用 lock 和 unlock 替换为使用 std::lock_guard?
【问题讨论】:
-
condition是否需要在互斥锁的范围内? -
@NathanOliver 是的,访问时必须锁定。
-
就个人而言,我会使用
unique_lock并仍然手动解锁互斥锁。您可以获得 RAII 并控制解锁过程 -
@KABoissonneault 恕我直言,这是最干净的方法。它可以防止你有多个 if 就像 Xarn 的答案。
标签: c++ multithreading