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