C++基础语法-并发支持库

互斥

互斥算法避免多个线程同时访问共享资源。这会避免数据竞争,并提供线程间的同步支持。

mutex

// 在标头<mutex>定义
class mutex; // (C++11起)

mutex类是能用于保护共享数据避免受从多个线程同时访问的同步原语。
mutex提供排他性非递归所有权语义:

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

若mutex在仍为任何线程所占有时即被销毁,或在占有mutex时线程终止,则行为未定义。
mutex即不可复制亦不可移动。
成员函数

函数功能
mutex()构成互斥
~mutex()析构函数
operator=() = delete;不可复制赋值
锁定
lock锁定互斥,若互斥不可用则阻塞
try_lock尝试锁定互斥,若互斥不可用则返回
unlock解锁互斥

lock_guard

// 在标头<mutex>定义
template <class Mutex> class lock_guard;

类lock_guard是互斥体包装器,为在作用域块期间占有互斥提供便利RAII风格机制。
创建lock_guard对象时,它试图接收给定互斥的所有权。控制离开创建lock_guard对象的作用域时,销毁lock_guard并释放互斥。lock_guard类不可复制。
成员函数

函数功能
构造函数构造lock_guard,可选地锁定给定的互斥
析构函数析构lock_gurad,解锁底层互斥
operator=() = delete;不可复制赋值

unique_lock

// 在标头<mutex>定义
template <class Mutex> class unique_lock;

类unique_lock是通用互斥包装器,允许延迟锁定、锁定的有时限尝试、递归锁定、所有权转移和与条件变量一同使用。
类unique_lock可移动,但不可复制—它满足可移动构造和可移动赋值但不满足可复制构造或可复制赋值。
类unique_lock满足基本可锁定要求。
成员函数

函数功能
构造函数构造unqiue_lock,可选地锁定给定的互斥
析构函数析构unqiue_lock,解锁底层互斥
operator=(&&)移动复制赋值,若占有则解锁互斥,并取得另一者的所有权
锁定
lock锁定关联互斥
try_lock尝试锁定关联互斥,若互斥不可用则返回
try_lock_for尝试锁定关联的可定时锁定互斥,若互斥在给定时长中不可用则返回
try_lock_until尝试锁定关联可定时锁定互斥,若抵达指定时间互斥仍不可用则返回
unlock解锁关联互斥
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值