<mutex>

包括用于定义类 mutexrecursive_mutextimed_mutexrecursive_timed_mutex 的标准标头 <mutex>;模板 lock_guardunique_lock;以及用于定义互斥代码区域的支持类型和函数。

警告

从 Visual Studio 2015 开始,C++ 标准库同步类型基于 Windows 同步基元,且不再使用 ConcRT(除非目标平台是 Windows XP)。 <mutex> 中定义的类型不应与任何 ConcRT 类型或函数一起使用。

要求

标头<mutex>

命名空间std

注解

注意

在使用 /clr 编译的代码中,禁止使用此标头。

mutexrecursive_mutex 是互斥体类型。 互斥类型有默认构造函数和不会引发异常的析构函数。 当多个线程尝试锁定同一对象时,这些对象有方法实现互相排斥。 具体而言,互斥体类型包含的方法有 locktry_lockunlock

  • lock 方法是阻止调用线程,直到线程获取互斥体的所有权。 忽略其返回值。

  • try_lock 方法尝试在不阻止的情况下获取互斥体的所有权。 如果此方法获取所有权,则其返回类型可转换为 bool 且为 true否则即为 false

  • unlock 方法是从调用线程中释放互斥体的所有权。

可以使用互斥体类型作为类型参数来对模板 lock_guardunique_lock 进行实例化。 可以将这些类型的对象用作模板 condition_variable_any 中等待成员函数的 Lock 参数。

定时互斥体类型满足互斥体类型的需求。 此外,它还具有 try_lock_fortry_lock_until 方法,这两种方法必须可使用一个参数进行调用,并且返回的类型必须可转换为 bool。 定时互斥体类型可使用其他自变量来定义这些函数,前提是这些其他自变量都具有默认值。

  • try_lock_for 方法必须通过使用一个参数(即 Rel_time)来调用,该参数的类型是 chrono::duration 的实例化。 此方法尝试获取互斥体的所有权,但无论成功与否,都会在 Rel_time 指定的时间内返回。 如果此方法获取所有权,则返回值转换为 true;否则,返回值将转换为 false

  • try_lock_until 方法必须通过使用一个参数(即 Abs_time)来调用,该参数的类型是 chrono::time_point 的实例化。 此方法尝试获取互斥体的所有权,但无论成功与否,都会在不迟于 Abs_time 指定的时间内返回。 如果此方法获取所有权,则返回值转换为 true;否则,返回值将转换为 false

互斥体类型也称为可锁定类型。 如果未提供成员函数 try_lock,则为基本可锁定类型。 定时互斥类型称为定时可锁定类型。 定时可锁定类型会阻止一段指定的时间,或者直到获取互斥上的锁为止

成员

“属性” 描述
lock_guard 表示可进行实例化以创建其析构函数解锁互斥的对象的模板。
mutex 类(C++ 标准库) 表示互斥体类型。 使用此类型的对象以在程序内强制实现互相排斥。
recursive_mutex 表示互斥体类型。 与 mutex 类相比,为已锁定的对象调用锁定方法的行为是有明确定义的。
recursive_timed_mutex 使用此类型的对象以在程序内强制实现有时间限制的互相排斥。 与 timed_mutex 不同,为 recursive_timed_mutex 对象调用锁定方法的效果是有明确定义的。
scoped_lock
timed_mutex 使用此类型的对象以在程序内强制实现有时间限制的互相排斥。
unique_lock 表示可进行实例化以创建管理互斥锁定和解锁的对象的模板。

函数

名称 描述
call_once 提供在执行期间只调用一次指定的可调用对象的机制。
lock 尝试在不死锁的情况下锁定所有自变量。
swap 尝试交换两个 mutex 对象(即 xy)的内部状态。
try_lock 尝试锁定可锁定的对象。 立即返回。

结构

名称 描述
adopt_lock_t 结构 表示用于定义 adopt_lock 的类型。
defer_lock_t 结构 表示定义用于选择 unique_lock 的重载构造函数之一的 defer_lock 对象的类型。
once_flag 结构 表示与模板函数 call_once 结合使用的 struct,以确保即使出现多个执行线程,初始化代码只调用一次。
try_to_lock_t 结构 表示定义 try_to_lock 对象并用于选择 unique_lock 的重载构造函数之一的 struct

变量

名称 描述
adopt_lock 表示可传递给 lock_guardunique_lock 的构造函数的对象,用于指示同样传递给构造函数的 mutex 对象已锁定。
defer_lock 表示可传递给 unique_lock 的构造函数的对象,用于指示构造函数不应锁定同样传递给它的 mutex 对象。
try_to_lock 表示可传递给 unique_lock 的构造函数的对象,用于指示构造函数应尝试在不阻止的情况下解锁同样传递给它的 mutex 对象。

另请参阅

头文件引用