【发布时间】:2013-12-29 06:52:30
【问题描述】:
我有两个用例。
A.我想同步访问两个线程的队列。
B.我想同步两个线程对队列的访问并使用条件变量,因为其中一个线程将等待另一个线程将内容存储到队列中。
对于用例 A,我看到了使用 std::lock_guard<> 的代码示例。对于用例 B,我看到了使用 std::unique_lock<> 的代码示例。
这两者有什么区别,我应该在哪个用例中使用哪一个?
【问题讨论】:
-
// 需要 "Unqiue_Lock" 而不是 "std::Lock_Guard" : (For Conditional Wait()) 为什么你需要 std::unique_lock 而不是 std::lock_guard——等待线程必须在等待时解锁互斥锁,然后再次锁定它,并且“std::lock_guard 不提供这种灵活性”。如果互斥锁在线程休眠时保持锁定,则数据准备线程将无法锁定互斥锁以将项目添加到队列中,并且等待线程将永远无法看到其条件满足
标签: c++ multithreading c++11 mutual-exclusion stdmutex