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

来自cppreference.com
< cpp‎ | named req


 
 
C++ 具名要求
 

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

要求

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

  • 表达式 m.lock() 具有下列性质
  • 表现为原子操作。
  • 阻塞调用方线程,直到能获得互斥体的排他性所有权为止。
  • 同一互斥体上先前的 m.unlock() 操作同步于此锁定操作(等价于释放-获得 std::memory_order )。
  • 若调用方线程已占有互斥体,则行为未定义(除非 m 是 std::recursive_mutexstd::recursive_timed_mutex)。
  • 错误时可能抛出 std::system_error 类型的异常,拥有下例错误码:
  • 表达式 m.try_lock() 具有下列性质
  • 表现为原子操作。
  • 试图为调用方线程获得互斥体的排他性所有权,而不阻塞。若未获得所有权则立即返回。允许此函数虚假地失败并返回,即使互斥当前未被另一线程所占有。
  • try_lock() 成功,则同一对象上先前的 unlock() 操作同步于此操作(等价于释放-获得 std::memory_order)。lock() 不与失败的 try_lock() 同步。
  • 不抛异常。
  • 表达式 m.unlock() 具有下列性质
  • 表现为原子操作。
  • 释放调用方线程对互斥体的所有权,并同步于同一对象上的后继的成功锁定操作。
  • 若调用方线程不占有互斥体,则行为未定义。
  • 不抛异常。
  • 单个互斥体上的所有锁定和解锁操作在一个单独全序中发生,并能被视为一个原子变量的修改顺序:此顺序特定于此单独互斥体。

库类型

下列标准库类型满足互斥体 (Mutex)

缺陷报告

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

缺陷报告 应用于 出版时的行为 正确行为
LWG 2309 C++11 lock 可以抛出错误码为 std::errc::device_or_resource_busystd::system_error 不允许

参阅