命名空间
变体
操作

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

来自 cppreference.cn
 
 
C++ 命名要求
基本
类型属性
全库范围




Container(容器)
容器元素
迭代器 (Iterator)
流 I/O
格式化器
(C++20)
随机数
并发
(C++11)
TimedMutex(定时互斥量)
(C++11)
Ranges
多维视图
其他

 

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

[编辑] 标准库

以下标准库类型满足 TimedMutex 要求

提供互斥设施,可以被递归锁定
被同一线程锁定并实现带超时的锁定
(类) [编辑]
提供共享互斥设施,并实现带超时锁
(类) [编辑]
提供互斥设施,实现带超时的锁定
(类) [编辑]

[编辑] 缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

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

[编辑] 参见