<mutex>
包括用于定义类 mutex
、recursive_mutex
、timed_mutex
和 recursive_timed_mutex
的标准标头 <mutex>
;模板 lock_guard
和 unique_lock
;以及用于定义互斥代码区域的支持类型和函数。
警告
从 Visual Studio 2015 开始,C++ 标准库同步类型基于 Windows 同步基元,且不再使用 ConcRT(除非目标平台是 Windows XP)。 <mutex>
中定义的类型不应与任何 ConcRT 类型或函数一起使用。
要求
标头:<mutex>
命名空间:std
注解
注意
在使用 /clr
编译的代码中,禁止使用此标头。
类 mutex
和 recursive_mutex
是互斥体类型。 互斥类型有默认构造函数和不会引发异常的析构函数。 当多个线程尝试锁定同一对象时,这些对象有方法实现互相排斥。 具体而言,互斥体类型包含的方法有 lock
、try_lock
和 unlock
:
lock
方法是阻止调用线程,直到线程获取互斥体的所有权。 忽略其返回值。try_lock
方法尝试在不阻止的情况下获取互斥体的所有权。 如果此方法获取所有权,则其返回类型可转换为bool
且为true
否则即为false
。unlock
方法是从调用线程中释放互斥体的所有权。
可以使用互斥体类型作为类型参数来对模板 lock_guard
和 unique_lock
进行实例化。 可以将这些类型的对象用作模板 condition_variable_any
中等待成员函数的 Lock
参数。
定时互斥体类型满足互斥体类型的需求。 此外,它还具有 try_lock_for
和 try_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 对象(即 x 和 y )的内部状态。 |
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_guard 和 unique_lock 的构造函数的对象,用于指示同样传递给构造函数的 mutex 对象已锁定。 |
defer_lock |
表示可传递给 unique_lock 的构造函数的对象,用于指示构造函数不应锁定同样传递给它的 mutex 对象。 |
try_to_lock |
表示可传递给 unique_lock 的构造函数的对象,用于指示构造函数应尝试在不阻止的情况下解锁同样传递给它的 mutex 对象。 |