std::mutex_C++中文网

class mutex;

(C++11 起)

mutex 类是能用于保护共享数据免受从多个线程同时访问的同步原语。

mutex 提供排他性非递归所有权语义:

  • 调用方线程从它成功调用 locktry_lock 开始,到它调用 unlock 为止占有 mutex
  • 线程占有 mutex 时,所有其他线程若试图要求 mutex 的所有权,则将阻塞(对于 lock 的调用)或收到 false 返回值(对于 try_lock ).
  • 调用方线程在调用 locktry_lock 前必须不占有 mutex

mutex 在仍为任何线程所占有时即被销毁,或在占有 mutex 时线程终止,则行为未定义。 mutex 类满足互斥体 (Mutex) 标准布局类型 (StandardLayoutType) 的全部要求。

std::mutex 既不可复制亦不可移动。

成员类型

 
成员类型 定义
native_handle_type(可选) 实现定义

成员函数

构造互斥
(公开成员函数)
销毁互斥
(公开成员函数)

operator=

[被删除]

不可复制赋值
(公开成员函数)
锁定
锁定互斥,若互斥不可用则阻塞
(公开成员函数)
尝试锁定互斥,若互斥不可用则返回
(公开成员函数)
解锁互斥
(公开成员函数)
原生句柄
返回底层实现定义的原生句柄
(公开成员函数)

注意

通常不直接使用 std::mutexstd::unique_lockstd::lock_guard std::scoped_lock (C++17 起)以更加异常安全的方式管理锁定。

示例

此示例展示 mutex 能如何用于在保护共享于二个线程间的 std::map

输出:

http://bar => fake content
http://foo => fake content