C++多线程

综述

我们用mutex来保护一段数据;用lock在一段代码中封装mutex,管理mutex的上锁和释放锁

Mutex

  • mutex:一般意义上的互斥锁,同时只能有一个owner

  • shared_mutex:读写锁,拥有两种不同的访问方式

    • 操作 描述
      独家访问 相当于写者打算写入数据了
      共同访问 相当于读者来查看数据
    • 这是一个写者优先的读写锁

Lock

  • lock_guard:在构造函数中自动上锁,在析构函数中自动释放锁,实现了RAII,可以用来管理mutex
    • 相对简单,只能进行一次上锁和释放锁,所以在使用conditional variable的时候,或者在一个scope结束前就需要手动unlock的时候不能用lock_guard
  • unique_lock:在构造函数中手动上锁,相比于lock_guard,灵活性更强,时间效率更低,占用空间更大