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。

你可能感兴趣的:(C++,多线程)