Lock类型
C++11提供两种基本类型的lock
1、lock_guard 方便线程对互斥量上锁
2、unique_lock 方便对互斥量上锁,但是提供了更好的上锁和解锁control
与锁相关的Tag类(通常作为参数传给lock_guard或者unique_lock的构造函数)
std::adopt_lock_t std::defer_lock_t std::try_to_lock_t
std::lock_guard介绍:
lock_guard通常用于管理锁对象,方便线程对互斥量上锁;在lock_guard的生命周期内,它所管理的锁对象一直处于上锁状态,生命周期结束后,锁对象就会解锁。实际上lock_guard是自动管理上锁和解锁,类似于smart 指针
std::lock_guard的构造函数
explicit lock_guard(mutex_type& m );
lock_guard(mutex_type&m,adopt_lock_t tag);
lock_guard(const lock_guard&)=delete;
1、lock_guard对象管理Mutex对象m,并在构造时对m上锁(调用m.lock())
2、lock_guard对象管理Mutex对象m,m已经被当前线程锁住
3、lock_guard的拷贝构造和移动构造均被禁用
// constructing lock_guard with adopt_lock
#include <iostream> // std::cout
#include <thread> // std::thread
#include <mutex> // std::mutex, std::lock_guard, std::adopt_lock
std::mutex mtx; // mutex for critical section
void print_thread_id (int id) {
mtx.lock();
std::lock_guard<std::mutex> lck (mtx, std::adopt_lock);
std::cout << "thread #" <<