c++多线程库手册学习笔记(二)

本文介绍了C++多线程库中的mutex及其管理类lock_guard和scoped_lock。lock_guard通过RAII实现自动锁定和解锁,避免了因异常或线程取消导致的死锁问题。scoped_lock在C++17中引入,支持同时锁定多个锁,有助于防止死锁。文章探讨了死锁的产生和避免策略,并预告了对更灵活的unique_lock和shared_lock的讨论。
摘要由CSDN通过智能技术生成

三、mutex
1、基本mutex
定义在头文件mutex中,std命名空间。

#include <mutex>

基本mutex的用法非常普通,和pthread中无异,在c语言的编程中,对于mutex的lock和unlock是较为麻烦的,因为要关注正常退出和异常退出时,锁的释放,否则将容易造成死锁,还有线程被cancel时候锁的释放。

在c++中聪明的利用了对象销毁时自动析构的机制,采用了RAII思想,对锁进行了封装管理,所以一般在使用c++的锁时,应该是不建议直接对mutex对象进行操作的,而应该借助这些管理类型来操作。
2.基本的两个锁管理类:lock_guard, scoped_lock

  • lock_guard
    lockguard类型只有构造函数和析构函数,只提供最简单的RAII机制,既初始化时获取mutex并锁定,出定义域时析构函数里自动释放锁,这就解决了之前提出的那些麻烦的场景问题,因为不管时cancel了线程还是出现异常退出了线程,变量都将退出定义域,析构函数都将自动调用,锁都会释放。

该类型只能用于锁定一个锁,一般用于某个函数只对一个mutex管理下的数据进行修改访问时使用:

//省略各种头文件
std::mutex one_mutex;
int data=0;
void modify_shared_data(){
   
	std::lock_guard<std::mutex> guard(one_mutex);
	data++;
	std::cout<<"Now, data is: "<<data<<std::endl;
}	//guard的析构函数自动释放锁</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值