Namespaces
Variants

C++ named requirements: Mutex (since C++11)

From cppreference.net
C++ named requirements

Mutex 要求扩展了 Lockable 要求,包含了线程间同步机制。

目录

要求

对于类型为 Mutex 的对象 m

  • 表达式 m. lock ( ) 具有以下特性
  • 表现为原子操作。
  • 阻塞调用线程直至获得互斥量的独占所有权。
  • 同一互斥量上先前的 m. unlock ( ) 操作与此锁定操作形成同步关系(等效于释放-获取语义的 std::memory_order )。
  • 若调用线程已拥有该互斥量,则行为未定义(除非 m 是 std::recursive_mutex std::recursive_timed_mutex )。
  • 发生错误时可能抛出 std::system_error 类型异常,包含以下错误码:
  • 表达式 m. try_lock ( ) 具有以下特性
  • 表现为原子操作。
  • 尝试以非阻塞方式为调用线程获取互斥量的独占所有权。若未能获得所有权,立即返回。该函数允许虚假失败,即使互斥量当前未被其他线程占用也可能返回失败。
  • try_lock() 成功,则同一对象上先前的 unlock() 操作与此操作形成同步关系(等效于释放-获取语义的 std::memory_order )。 lock() 不会与失败的 try_lock() 形成同步。
  • 不会抛出异常。
  • 表达式 m. unlock ( ) 具有以下特性
  • 表现为原子操作。
  • 释放调用线程对互斥锁的所有权,并与同一对象后续成功的锁定操作建立 同步关系
  • 若调用线程未持有该互斥锁,则行为未定义。
  • 不抛出异常。
  • 对单个互斥锁的所有加锁和解锁操作都发生在单一全序中,该顺序可视为原子变量的 修改顺序 :此顺序特定于该独立互斥锁。

标准库

以下标准库类型满足 Mutex 要求:

(C++11)
提供基础互斥设施
(类)
提供可被同一线程递归锁定的互斥设施
(类)
提供可被同一线程递归锁定
并实现超时锁定功能的互斥设施
(类)
提供共享互斥设施
(类)
提供共享互斥设施并实现超时锁定功能
(类)
提供实现超时锁定功能的互斥设施
(类)

缺陷报告

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

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

参见