unique_lock是C++標準庫中的一個互斥量封裝類,用于實現線程的同步和互斥。它提供了一種更靈活的方式來管理互斥量,相比于lock_guard,unique_lock提供了更多的功能和選項。
unique_lock的用法如下:
std::mutex mtx;
std::unique_lock<std::mutex> lock(mtx);
lock.lock(); // 或者使用構造函數時傳入std::defer_lock參數創建未加鎖的unique_lock對象
lock.unlock();
lock.lock();
std::lock_guard<std::mutex> lock(mtx); // 自動加鎖
std::unique_lock<std::mutex> lock(mtx, std::adopt_lock); // 創建已加鎖的unique_lock對象
std::unique_lock<std::mutex> lock(mtx, std::try_to_lock);
if (lock.owns_lock()) {
// 互斥量已被當前線程加鎖
}
else {
// 互斥量已被其他線程加鎖
}
std::unique_lock<std::mutex> lock(mtx, std::defer_lock);
// 執行一些操作
lock.lock(); // 加鎖
// 執行另一些操作
lock.unlock(); // 解鎖
unique_lock提供了更多的靈活性和控制權,可以根據需要選擇合適的加鎖方式。同時,unique_lock還支持條件變量的使用,可以在等待條件時暫時解鎖互斥量,以避免不必要的阻塞。