C++ 具名要求:定时互斥体 (TimedMutex) (C++11 起)

来自cppreference.com
< cpp‎ | named req


 
 
C++ 具名要求
 

定时互斥体 (TimedMutex) 要求扩展了可定时锁定 (TimedLockable) 要求,以包含线程间同步。

要求

另外,对于定时互斥体 (TimedMutex) 类型的对象 m

  • 表达式 m.try_lock_for(duration) 拥有下列性质
  • 表现为原子操作。
  • 尝试在 duration 所指定的时长内获得互斥体的排他所有权。若 duration 小于或等于 duration.zero(),则尝试获得所有权而不阻塞(如同用 try_lock())。否则,此函数将阻塞直至得到互斥体,或直至经过 duration 所指定的时长。它仅若成功才在 duration 内返回,但允许获得互斥体失败,即使在 duration 期间的某点,互斥体不为另一线程所占有也可能如此。任何情况下,若得到互斥体则返回 true,否则返回 false
  • try_lock_for(duration) 成功,则同一对象上先前的 unlock() 操作同步于此操作(等价于释放-获得 std::memory_order)。
  • 若调用方线程已占有互斥体,则行为未定义(除非 mstd::recursive_timed_mutex)。
  • 执行期间时钟、时间点或时长可能抛出异常(标准库提供的时钟、时间点及时长决不抛出)。
  • 表达式 m.try_lock_until(time_point) 拥有下列性质
  • 表现为原子操作。
  • 尝试在到 time_point 为止的剩余时间内获得互斥体的排他所有权。若已经过 time_point,则尝试获得所有权而不阻塞(如同用 try_lock())。否则,此函数将阻塞直至得到互斥体,或直至经过 time_point 所指定的时间点。它仅若成功才在 time_point 前返回,但允许获得互斥体失败,即使在 time_point 前的某点,互斥体不为另一线程所占有也可能如此。任何情况下,若得到互斥体则返回 true,否则返回 false
  • try_lock_until(time_point) 成功,则同一对象上先前的 unlock() 操作同步于此操作(等价于释放-获得 std::memory_order)。
  • 若调用方线程已占有互斥体,则行为未定义(除非 mstd::recursive_timed_mutex)。
  • 执行期间时钟、时间点或时长可能抛出异常(标准库提供的时钟、时间点及时长决不抛出)。

库类型

下列标准库类型满足定时互斥体 (TimedMutex)

缺陷报告

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

缺陷报告 应用于 出版时的行为 正确行为
LWG 2093 C++11 规范中缺失超时相关异常 已提及

参阅