问题
最近在项目总结过程中,发现项目大量使用了 std::lock_guard 这个模板类,仔细分析后发现这个类牵扯到了很多重要的计算机基础,例如:多线程,互斥,锁等等,这里便记录下来,也算是一次简单的总结。
std::lock_guard 简介
这个类是一个互斥量的包装类,用来提供自动为互斥量上锁和解锁的功能,简化了多线程编程,用法如下:
#include <mutex>
std::mutex kMutex;
void function() {
// 构造时自动加锁
std::lock_guard<std::mutex> (kMutex);
// 离开局部作用域,析构函数自动完成解锁功能
}
用法非常简单,只需在保证线程安全的函数开始处加上一行代码即可,其他的都在这个类的构造函数和析构函数中自动完成。
实现 my_lock_guard
这是自己实现的一个 lock_guard,就是在构造和析构中完成加锁和解锁的操作,