C++ 具名要求:定时互斥体 (TimedMutex)
来自cppreference.com
定时互斥体 (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) )。 - 若调用方线程已占有互斥,则行为未定义(除非 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 | 规范中缺失超时相关异常 | 已提及 |