c++11多线程学习 ------- std:lock_guard 类模板
忘记unlock()就麻烦了呢!
lock_guard() 懒人装置—自动加锁解锁
//选自mutex.h
template<class _Mutex>
class lock_guard<_Mutex>
{ // specialization for a single mutex
public:
typedef _Mutex mutex_type;
explicit lock_guard(_Mutex& _Mtx)
: _MyMutex(_Mtx)
{ // construct and lock
_MyMutex.lock();
}
lock_guard(_Mutex& _Mtx, adopt_lock_t)
: _MyMutex(_Mtx)
{ // construct but don't lock
}
~lock_guard() _NOEXCEPT
{ // unlock
_MyMutex.unlock();
}
lock_guard(const lock_guard&) = delete;
lock_guard& operator=(const lock_guard&) = delete;
private:
_Mutex& _MyMutex;
};
- lock_guard() 懒人装置—自动加锁解锁
- lock_guard() 构造时调用 mutex.lock(), 析构时调用mutex.unlock()
- 传入std::adopt_lock参数,构造lock_guard但是不加锁
- lock_guard(const lock_guard&) = delete;禁止使用lock_guard构造
- lock_guard& operator=(const lock_guard&) = delete;
使用
std::lock_guard< std::mutex > guard(mux);
std::lock_guard< std::mutex > guard(mux, std::adopt_lock); //需要保证已经提前加锁哦