C++中的锁是为了实现多线程编程时线程的同步和互斥机制。在多线程编程中,多个线程可能同时访问一个共享资源,如果没有合适的同步和互斥机制,会出现数据竞争和死锁的问题。

  1. 读写锁:std::shared_mutex,读写锁允许多个线程同时对共享资源进行操作,但是不可以同时进行写操作。当一个线程获取到读锁时,其他线程可以获取读锁,但是无法获取写锁;当一个线程获取到写锁时,其他线程读锁和写锁都无法获取。
  2. 互斥锁:std::mutex,互斥锁就是基本的锁,保证同一时间只有一个线程访问共享资源,当一个线程获取互斥锁时,其他线程不能获取锁,直到该线程锁释放。
  3. 条件变量:条件变量主要用于线程间通信,可以使用wait让一个线程等候另一个线程的通知,当要等候的线程准备完成后,可以使用notify_one/notify_all来通知等待的线程;条件变量可以通过 std::condition_variable 类来实现。