命名空间
变体
操作

C++ 命名要求: TimedMutex (自 C++11 起)

来自 cppreference.com
 
 
C++ 命名要求
 

The 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() 操作会与该操作 *同步*(等效于 release-acquire 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() 操作会与该操作 *同步*(等效于 release-acquire std::memory_order)。
  • 如果调用线程已经拥有互斥量,则行为未定义(除非 m 是 std::recursive_timed_mutex)。
  • 在执行过程中,时钟、时间点或持续时间可能会抛出异常(标准库提供的时钟、时间点和持续时间永远不会抛出异常)。

[编辑] 库类型

以下标准库类型满足 TimedMutex

[编辑] 缺陷报告

以下行为更改的缺陷报告被追溯应用于以前发布的 C++ 标准。

DR 应用于 已发布的行为 正确的行为
LWG 2093 C++11 超时相关的异常在规范中缺失 已提及

[编辑] 另请参阅