std::recursive_timed_mutex:: try_lock_until
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Locking | ||||
|
recursive_timed_mutex::try_lock_until
|
||||
| Native handle | ||||
|
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
,则程序非良构。
(since C++20)
标准建议使用与 timeout_time 绑定的时钟,这种情况下可能会考虑对时钟的调整。因此,阻塞的持续时间可能大于或小于调用时的 timeout_time - Clock :: now ( ) ,具体取决于调整的方向以及实现是否遵循该调整。该函数也可能由于进程调度或资源竞争延迟而一直阻塞直到超过 timeout_time 。
与 try_lock() 类似,此函数允许虚假失败并返回 false ,即使互斥锁在 timeout_time 之前的某个时间点未被任何其他线程锁定。
在同一互斥锁上的先前 unlock() 操作与此操作形成 同步关系 (定义见 std::memory_order ),若本操作返回 true 。
线程可以多次对递归互斥锁调用
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
不抛出任何异常
|
抛出超时相关异常 |
参见
|
锁定互斥锁,若互斥锁不可用则阻塞
(公开成员函数) |
|
|
尝试锁定互斥锁,若互斥锁不可用则立即返回
(公开成员函数) |
|
|
尝试锁定互斥锁,若互斥锁在指定的超时时间内
持续不可用则返回 (公开成员函数) |
|
|
解锁互斥锁
(公开成员函数) |
|
|
C 文档
关于
mtx_timedlock
|
|