0
我需要鎖定一個std :: map和兩個boost :: multimaps函數內的操作,因爲我們有線程試圖訪問該函數(以及因此映射)。什麼更好std :: lock_guard <std::mutex>鎖(std :: mutex mutex_var);或std :: mutex mutex_var.lock();
我打算使用「std :: mutex mutex_var」來保護那些操縱它們的函數內部的變量。所以我有「std :: mutex mutex_var」變量。我在函數開頭使用「mutex_var.lock()」和函數結尾使用「mutex_var.unlock()」時感到困惑,只是在函數的開始處使用std :: lock_guard?
爲了清楚起見,所有函數都在互斥體上添加了一些東西。我也明白/我們不需要保護我們試圖查詢地圖的所有地方(因爲它只是一個讀取操作)。
請讓我知道更好的選擇,也請澄清,如果我的閱讀思路不需要保護是正確的。
TIA
-R
您應該一次提出一個問題。 – Slava
如果在鎖定互斥鎖時引發異常,會發生什麼情況? –
mutex.lock()可能是一個問題,但我認爲std :: lock_guard(mutex_var)會沒問題,因爲棧幀會消失,從而使lock_guard失去範圍,從而釋放鎖定。如果我錯了,請糾正我。 – codeworks