为什么lock_guard需要可锁定的概念

时间:2012-12-16 12:07:50

标签: c++ multithreading c++11

似乎BasicLockable概念足以用于lock_guard,但在标准草案(N3242)中,Mutex模板参数需要Lockable。有什么原因吗?

1 个答案:

答案 0 :(得分:2)

在n3290(§30.4.2.1[thread.lock.guard] / 1)中,它说,

  

类型lock_guard的对象控制范围内可锁定对象的所有权。 lock_guard对象在lock_guard对象的生命周期内维护可锁定对象的所有权(3.8)。如果在pm对象的整个生命周期内lock_guard引用的可锁定对象不存在,则程序的行为是未定义的。 提供的Mutex类型应符合BasicLockable要求(30.2.5.2)。

n3242中的第2段可能是编辑错误。这是library defect 2023: Incorrect requirements for lock_guard and unique_lock,并且在n3290中删除了该段落,如n3278: Recent Concurrency Issue Resolutions

中所示