在C++中,mutex(互斥鎖)用于實現線程的同步,以避免線程之間的競爭條件(race condition)。互斥鎖可以確保在任何時刻只有一個線程可以訪問共享資源。以下是互斥鎖的主要用法:
創建和初始化互斥鎖:
std::mutex mtx; // 創建互斥鎖對象
加鎖和解鎖互斥鎖:
lock()
函數來鎖定互斥鎖。如果互斥鎖已經被其他線程鎖定,當前線程將被阻塞,直到互斥鎖被解鎖。mtx.lock(); // 加鎖互斥鎖
unlock()
函數來解鎖互斥鎖。mtx.unlock(); // 解鎖互斥鎖
自動加解鎖互斥鎖:
為了確保在任何情況下都能正確解鎖互斥鎖,可以使用std::lock_guard
類來自動處理加鎖和解鎖操作。std::lock_guard
在構造時自動鎖定互斥鎖,并在作用域結束時自動解鎖。
std::mutex mtx;
// 在作用域結束時自動解鎖
{
std::lock_guard<std::mutex> lock(mtx);
// 臨界區代碼
} // 作用域結束,自動解鎖互斥鎖
嘗試加鎖互斥鎖:
可以使用try_lock()
函數來嘗試加鎖互斥鎖。該函數會嘗試鎖定互斥鎖,如果互斥鎖當前已被其他線程鎖定,則嘗試加鎖失敗,并立即返回false
;如果互斥鎖當前未被鎖定,則嘗試加鎖成功,并返回true
。
if (mtx.try_lock()) {
// 互斥鎖加鎖成功
// 臨界區代碼
mtx.unlock(); // 解鎖互斥鎖
} else {
// 互斥鎖加鎖失敗
}
上述是互斥鎖最常見的用法。互斥鎖的正確使用可以確保在多線程環境下對共享資源的安全訪問。