std::recursive_timed_mutex::try_lock_until
template< class Clock, class Duration > bool try_lock_until( const std::chrono::time_point<Clock, Duration>& timeout_time ); |
(C++11 起) | |
尝试锁定互斥量。当前线程会在锁定成功(占有互斥量)或者抵达指定的时间点 timeout_time(超时)前阻塞,取决于何者先到来。锁定成功时返回 true,否则返回 false。
如果调用时已经过了时间点 timeout_time,那么此函数表现同 try_lock()。
Clock
必须符合时钟 (Clock) 要求。如果 std::chrono::is_clock_v<Clock> 是 false,那么程序非良构。 (C++20 起)
标准推荐使用绑定到 timeout_time 的时钟,此时调整时钟会有影响。从而阻塞的时长可能会小于或大于调用时的 timeout_time - Clock::now(),取决于调整的方向以及实现是否尊重这样的调整。函数也可能会因为调度或资源纠纷延迟而阻塞到 timeout_time 之后的某个时间点。
与 try_lock() 相同,此函数可以假装失败并返回 false,即使在 timeout_time 前的某个时间点此互斥量没有被任何其他线程锁定。
如果此操作返回 true,那么相同互斥量上先前的 unlock() 操作同步于(在 std::memory_order 定义)它。
线程可以在递归互斥上重复调用 try_lock_until
。对 try_lock_until
的成功调用会增加所有权计数:线程只有在调用对应次数的 unlock() 后才会释放互斥。
所有权的最大层级是未指定的。如果超出此值,那么到 try_lock_until
的调用将会返回 false。
参数
timeout_time | - | 要阻塞到的最晚时间点 |
返回值
成功锁定时返回 true,否则返回 false。
异常
timeout_time 可能抛出的异常(标准库提供的时钟、时间点和时长决不抛出)
示例
本节未完成 原因:暂无示例 |
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
LWG 2093 | C++11 | try_lock_until 不会抛出
|
抛出超时相关异常 |
参阅
锁定互斥,若互斥不可用则阻塞 (公开成员函数) | |
尝试锁定互斥,若互斥不可用则返回 (公开成员函数) | |
尝试锁定互斥,若互斥在指定的时限时期中不可用则返回 (公开成员函数) | |
解锁互斥 (公开成员函数) |