windows臨界區
Windows臨界區,同一個線程是可以重複進入的,但是進入的次數與離開的次數必須相等。
C++互斥量則不允許同一個線程重複加鎖。
RAII類:(Resource Acquisition is initialization)資源獲取及初始化
遞歸獨佔互斥量 std::recursive_mutex
std::mutex 獨佔式互斥量
std::recursive_mutex:允許同一個線程同一個互斥量多次被 lock() 。
如果你真的用了 recursive_mutex 要考慮代碼是否有優化空間, recursive_mutex效率要比mutex低。
遞歸次數據說有限制。
帶超時的互斥量 std::timed_mutex 和 std::recursive_timed_mutex
std::timed_mutex:是待超時的獨佔互斥量
try_lock_for():等待一段時間,如果拿到了鎖,或者超時了未拿到鎖,就繼續執行(有選擇執行)如下:
std::chrono::milliseconds timeout(100);
if (my_mymutex.try_lock_for(timeout)){
//......
}
else{
std::chrono::milliseconds sleeptime(100);
std::this_thread::sleep_for(sleeptime);
}
try_lock_until():參數是一個未來的時間點,在這個未來的時間沒到的時間內,如果拿到了鎖頭,流程就走下來,如果時間到了沒拿到鎖,流程也可以走下來。
std::chrono::milliseconds timeout(100);
if (my_mymutex.try_lock_until(chrono::steady_clock::now() + timeout)){
//......
}
else{
std::chrono::milliseconds sleeptime(100);
std::this_thread::sleep_for(sleeptime);
}
std::recursive_timed_mutex:是待超時的遞歸獨佔互斥量