C++ named requirements: TimedMutex (since C++11)
From cppreference.net
C++
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++11)
|
提供可由同一线程递归锁定的互斥设施,并实现带超时的锁定机制
(类) |
|
(C++14)
|
提供共享互斥设施并实现带超时的锁定机制
(类) |
|
(C++11)
|
提供实现带超时锁定机制的互斥设施
(类) |
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| 缺陷报告 | 适用范围 | 发布时行为 | 正确行为 |
|---|---|---|---|
| LWG 2093 | C++11 | 规范中缺失超时相关异常说明 | 已补充说明 |