C 11多執行緒之std lock guard

2021-07-10 12:12:34 字數 837 閱讀 2046

原文:

std::lock_guard

lock_guard 類是乙個mutex封裝者,它為了擁有乙個或多個mutex而提供了一種方便的 raii style 機制。(譯註:所謂的raii,全稱為resource acquisition is initialization,漢語是「資源獲取即初始化」。但是這個直譯並沒有很好地解釋這個片語的含義。其實含義並不高深複雜,簡單說來就是,在資源獲取的時候將其封裝在某類的object中,利用"棧資源會在相應object的生命週期結束時自動銷毀"來自動釋放資源,即,將資源釋放寫在析構函式中。所以這個raii其實就是和智慧型指標的實現是類似的。

當乙個lock_guard物件被建立後,它就會嘗試去獲得給到它的mutex的所有權。當控制權不在該lock_guard物件所被建立的那個範圍後,該lock_guard就會被析構,從而mutex被釋放。

如果給定幾個mutex,那麼死鎖避免演算法就會被使用,比如 std::lock. (自從c++17)

lock_guard類是 non-copyable的。

示例程式:

#include #include #include int g_i = 0;

std::mutex g_i_mutex; // protects g_i

void safe_increment()

int main()

可能的輸出:

main: 0

140641306900224: 1

140641298507520: 2

main: 2

C 11多執行緒之mutex

mutex類是能用於保護共享資料免受從多個執行緒同時訪問的同步原語。mutex既不可複製亦不可移動。構造互斥。呼叫後互斥在未鎖定狀態。mutex 複製建構函式被刪除。mutex const mutex delete lock 鎖定互斥。若另一線程已鎖定互斥,則到lock的呼叫將阻塞執行,直至獲得鎖。...

C 11 多執行緒

新特性之描述 雖然 c 11 會在語言的定義上提供乙個記憶體模型以支援執行緒,但執行緒的使用主要將以 c 11 標準庫的方式呈現。c 11 標準庫會提供型別 thread std thread 若要執行乙個執行緒,可以建立乙個型別 thread 的實體,其初始引數為乙個函式物件,以及該函式物件所需要...

c 11 多執行緒

1.多執行緒的原理 同一時間內,cpu只能處理1條執行緒,只有1條執行緒在工作 執行 多執行緒併發 同時 執行,其實是cpu快速地在多條執行緒之間排程 切換 如果cpu排程執行緒的時間足夠快,就造成了多執行緒併發執行的假象。思考 如果執行緒非常非常多,會發生什麼情況?cpu會在n多執行緒之間排程,c...