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