C++ 线程 共享资源保护

一、C++互斥量
< mutex >头文件介绍
Mutex 系列类(四种)
- std::mutex,最基本的 Mutex 类。
- std::recursive_mutex,递归 Mutex 类。
- std::time_mutex,定时 Mutex 类。
- std::recursive_timed_mutex,定时递归 Mutex 类。

Lock 类(两种)
- 列表内容std::lock_guard,与 Mutex RAII 相关,方便线程对互斥量上锁。
- std::unique_lock,与 Mutex RAII 相关,方便线程对互斥量上锁,但提供了更好的上锁和解锁控制。

< shared_mutex >头文件介绍

二、遇到的问题
1.问题:某次使用mutex时发现,mutex无效,两个线程遇到mutex时并没有被阻塞。
原因:经过多番盘查,发现mutex是类的成员变量,而每个线程中都新建该类。此时mutex只在类对象中有效,即生命周期只在类的对象中,对象销毁后,mutex也销毁。结果是,两个线程中使用的并不是同一个mutex,而是两个不同的mutex,结果mutex并没有达到保护资源的目的,事与愿违。
结论:使用mutex保护共享资源时,mutex应申明为全局或者静态变量。或者至少要保证两个线程使用的是同一个mutex。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值