C++ 命名要求: TimedMutex (自 C++11)
来自 cppreference.cn
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()
操作与此操作同步(等效于 release-acquire 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()
操作与此操作同步(等效于 release-acquire std::memory_order)。 - 如果调用线程已拥有互斥量(除非 m 是 std::recursive_timed_mutex),则行为未定义。
- 在执行期间,时钟、时间点或持续时间可能会抛出异常(标准库提供的时钟、时间点和持续时间永远不会抛出异常)。
[编辑] 标准库
以下标准库类型满足 TimedMutex 要求
(C++11) |
提供互斥设施,可以由同一线程递归锁定,并实现带超时的锁定 由同一线程递归锁定,并实现带超时的锁定 (类) |
(C++14) |
提供共享互斥设施,并实现带超时的锁定 (类) |
(C++11) |
提供互斥设施,并实现带超时的锁定 (类) |
[编辑] 缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的 C++ 标准。
DR | 应用于 | 已发布行为 | 正确行为 |
---|---|---|---|
LWG 2093 | C++11 | 规范中缺少与超时相关的异常 | 已提及 |