综述
我们用mutex来保护一段数据;用lock在一段代码中封装mutex,管理mutex的上锁和释放锁
Mutex
mutex:一般意义上的互斥锁,同时只能有一个owner
shared_mutex:读写锁,拥有两种不同的访问方式
操作 描述 独家访问 相当于写者打算写入数据了 共同访问 相当于读者来查看数据 - 这是一个写者优先的读写锁
Lock
- lock_guard:在构造函数中自动上锁,在析构函数中自动释放锁,实现了RAII,可以用来管理mutex
- 相对简单,只能进行一次上锁和释放锁,所以在使用conditional variable的时候,或者在一个scope结束前就需要手动unlock的时候不能用lock_guard
- unique_lock:在构造函数中手动上锁,相比于lock_guard,灵活性更强,时间效率更低,占用空间更大