跳到主要内容

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

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)。
    • 如果调用线程已经拥有互斥体,则行为未定义(除非 mstd::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)。
    • 如果调用线程已经拥有互斥体,则行为未定义(除非 mstd::recursive_timed_mutex)。
    • 在执行期间,时钟、时间点或持续时间可能会抛出异常(标准库提供的时钟、时间点和持续时间永远不会抛出)。

库类型

以下标准库类型满足 TimedMutex

缺陷报告

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

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

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

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)。
    • 如果调用线程已经拥有互斥体,则行为未定义(除非 mstd::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)。
    • 如果调用线程已经拥有互斥体,则行为未定义(除非 mstd::recursive_timed_mutex)。
    • 在执行期间,时钟、时间点或持续时间可能会抛出异常(标准库提供的时钟、时间点和持续时间永远不会抛出)。

库类型

以下标准库类型满足 TimedMutex

缺陷报告

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

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