Namespaces
Variants

C++ named requirements: SharedTimedMutex (since C++14)

From cppreference.net
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 要求:

提供共享互斥设施并实现带超时的锁定机制
(类)

参见