命名空间
变体
操作

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

来自 cppreference.cn
 
 
C++ 命名要求
基本
类型属性
全库范围




Container(容器)
容器元素
迭代器 (Iterator)
流 I/O
格式化器
随机数
并发
互斥体 (Mutex)
(C++11)
范围 (Ranges)
多维视图
其他

 

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

目录

[编辑] 要求

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

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

[编辑] 标准库

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

提供基本的互斥设施
(类) [编辑]
提供互斥设施,可以被同一线程递归锁定
(类) [编辑]
提供互斥设施,可以被递归锁定
被同一线程锁定并实现带超时的锁定
(类) [编辑]
提供共享互斥设施
(类) [编辑]
提供共享互斥设施,并实现带超时锁
(类) [编辑]
提供互斥设施,实现带超时的锁定
(类) [编辑]

[编辑] 缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

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

[编辑] 另请参阅