跳到主要内容

C++ 命名要求: 互斥体 (Mutex) (C++11 起)

互斥体 (Mutex) 要求扩展了 Lockable 要求,以包含线程间同步。

要求

对于 互斥体 (Mutex) 类型的对象 m

  • 表达式 m.lock() 具有以下属性:
  • 表达式 m.try_lock() 具有以下属性:
    • 行为如同原子操作。
    • 尝试为调用线程获取互斥体的独占所有权而不阻塞。如果未获得所有权,则立即返回。即使互斥体当前未被其他线程拥有,该函数也可能虚假失败并返回。
    • 如果 try_lock() 成功,则同一对象上之前的 unlock() 操作与此操作同步(相当于释放-获取 std::memory_order)。lock() 不与失败的 try_lock() 同步。
    • 不抛出异常。
  • 表达式 m.unlock() 具有以下属性:
    • 行为如同原子操作。
    • 释放调用线程对互斥体的所有权,并与同一对象上后续的成功锁定操作同步
    • 如果调用线程不拥有互斥体,则行为未定义。
    • 不抛出异常。
  • 单个互斥体上的所有锁定和解锁操作都以单个总顺序发生,这可以看作是原子变量的修改顺序:该顺序特定于此单个互斥体。

库类型

以下标准库类型满足 互斥体 (Mutex) 要求:

缺陷报告

以下改变行为的缺陷报告已追溯应用于先前发布的 C++ 标准。

DR应用于发布时的行为正确行为
LWG 2309C++11lock 可能会抛出带有错误代码 std::errc::device_or_resource_busy 的 std::system_error不允许

C++ 命名要求: 互斥体 (Mutex) (C++11 起)

互斥体 (Mutex) 要求扩展了 Lockable 要求,以包含线程间同步。

要求

对于 互斥体 (Mutex) 类型的对象 m

  • 表达式 m.lock() 具有以下属性:
  • 表达式 m.try_lock() 具有以下属性:
    • 行为如同原子操作。
    • 尝试为调用线程获取互斥体的独占所有权而不阻塞。如果未获得所有权,则立即返回。即使互斥体当前未被其他线程拥有,该函数也可能虚假失败并返回。
    • 如果 try_lock() 成功,则同一对象上之前的 unlock() 操作与此操作同步(相当于释放-获取 std::memory_order)。lock() 不与失败的 try_lock() 同步。
    • 不抛出异常。
  • 表达式 m.unlock() 具有以下属性:
    • 行为如同原子操作。
    • 释放调用线程对互斥体的所有权,并与同一对象上后续的成功锁定操作同步
    • 如果调用线程不拥有互斥体,则行为未定义。
    • 不抛出异常。
  • 单个互斥体上的所有锁定和解锁操作都以单个总顺序发生,这可以看作是原子变量的修改顺序:该顺序特定于此单个互斥体。

库类型

以下标准库类型满足 互斥体 (Mutex) 要求:

缺陷报告

以下改变行为的缺陷报告已追溯应用于先前发布的 C++ 标准。

DR应用于发布时的行为正确行为
LWG 2309C++11lock 可能会抛出带有错误代码 std::errc::device_or_resource_busy 的 std::system_error不允许