Namespaces
Variants

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

From cppreference.net
C++ named requirements

TimedMutex 需求在 TimedLockable 需求基础上扩展了线程间同步功能。

目录

要求

(注:根据要求,HTML标签、属性及C++专有名词"TimedLockable"和"Mutex"均未翻译,仅对说明性文字进行翻译。实际显示内容与原网页相同,无需额外翻译)

此外,对于类型为 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 )。
  • 若调用线程已拥有该互斥量,则行为未定义(除非 m 是 std::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 )。
  • 若调用线程已拥有该互斥量则行为未定义(除非 m 是 std::recursive_timed_mutex )。
  • 时钟、时间点或持续时间在执行过程中可能抛出异常(标准库提供的时钟、时间点和持续时间从不抛出异常)。

标准库

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

提供可由同一线程递归锁定的互斥设施,并实现带超时的锁定机制
(类)
提供共享互斥设施并实现带超时的锁定机制
(类)
提供实现带超时锁定机制的互斥设施
(类)

缺陷报告

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

缺陷报告 适用范围 发布时行为 正确行为
LWG 2093 C++11 规范中缺失超时相关异常说明 已补充说明

参见