C++日記——Day47:其他各種mutex互斥量

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:是待超時的遞歸獨佔互斥量

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章