C++ named requirements: SharedTimedMutex (since C++14)
From cppreference.net
C++
C++ named requirements
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SharedTimedMutex 要求扩展了 TimedMutex 要求,包含了共享锁所有权模式。
要求
此外,类型为
SharedTimedMutex
的对象
m
支持定时共享操作:
- 表达式 m. try_lock_shared_for ( duration ) 具有以下特性
-
- 表现为原子操作。
-
尝试在
duration指定的时长内获取互斥量的共享所有权。如果duration小于或等于duration.zero(),则尝试无等待获取所有权(如同通过try_lock())。否则,此函数将阻塞直到获取互斥量或达到duration指定的时长。仅当成功获取时会在duration时限内返回,但允许在即使互斥量于duration期间某时刻未被其他线程持有的情况下仍获取失败。无论何种情况,若成功获取互斥量则返回 true ,否则返回 false 。 -
若
try_lock_shared_for(duration)成功,则同一对象上先前的unlock()操作与此操作形成同步关系(等效于释放-获取语义的 std::memory_order )。 - 若调用线程已以任何模式持有该互斥量,则行为未定义。
- 时钟、时间点或时长在执行期间可能抛出异常(标准库提供的时钟、时间点和时长从不抛出异常)。
- 若抛出异常,则不会获取共享锁。
- 表达式 m. try_lock_shared_until ( time_point ) 具有以下特性
-
- 表现为原子操作。
-
尝试在到达
time_point前获取互斥量的共享所有权。若time_point已过,则尝试无锁获取所有权(如同通过try_lock())。否则,此函数将阻塞直至获取互斥量或到达time_point指定时刻。仅当成功获取时会在time_point前返回,但允许在time_point前的任意时刻即使互斥量未被其他线程占用时仍获取失败。无论何种情况,若成功获取互斥量则返回 true ,否则返回 false 。 -
若
try_lock_shared_until(time_point)成功,则同一对象上先前的unlock()操作与此操作 同步于 (等价于释放-获取语义的 std::memory_order )。 - 若调用线程已以任何模式持有该互斥量,则行为未定义。
- 时钟、时间点或持续时间在执行过程中可能抛出异常(标准库提供的时钟、时间点和持续时间从不抛出异常)。
- 若抛出异常,则不会获取共享锁。
标准库
以下标准库类型满足 SharedTimedMutex 要求:
|
(C++14)
|
提供共享互斥设施并实现带超时的锁定机制
(类) |