C++源码—lock_guard

在 C++11 中,我们可以使用 mutex 来实现线程的同步,mutex 包括上锁和解锁两个步骤。

lock_guard 的功能也是实现线程同步,可以进一步偷懒以及避免在锁定期间可能出现异常的情况,它的思想就是 RAII,在构造对象时就完成上锁的操作,当对象离开作用域时自动调用析构函数解锁。

template<class _Mutex>
	class lock_guard
	{	// class with destructor that unlocks a mutex
public:
	using mutex_type = _Mutex;

	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;
	};

  

posted @ 2022-04-17 13:29  Kayden_Cheung  阅读(334)  评论(0编辑  收藏  举报
//目录