C 多執行緒中通過lock實現執行緒同步

2021-08-10 03:06:47 字數 558 閱讀 3728

lock定義

lock關鍵字用來確保**塊執行完成,而不會被其他執行緒中斷。它可以把一段**定義為互斥段(critical section),互斥段在乙個時刻只允許乙個執行緒進入執行,而其他執行緒必須等待。這是通過在**執行期間為給定物件獲取互斥鎖來實現的。

在多執行緒中,每個執行緒都有自己的資源,但是**區是共享的,即每個執行緒都可以執行相同的函式。這樣可能導致幾個執行緒同時執行乙個函式,導致資料混亂,產生不可預料的結果,因此應該避免這種情況發生。

執行過程如下

private

static

object obj = new

object();

lock(obj)

執行緒a進入lock語句,判斷obj是否已申請了互斥鎖,如果不存在,則申請乙個新的互斥鎖,這時執行緒a進入lock裡面了。此時執行緒b後來的話,會等待a完成。

obj代表你希望跟蹤的物件,通常是物件引用,推薦使用私有的唯讀靜態物件,比如:

private static readonly object obj = new object();

C 多執行緒Lock

一.為什麼要lock,lock了什麼?當我們使用 執行緒的時候,效率最高的方式當然是 非同步,即各個執行緒同時執行,其間不相互依賴和等待。但當不同的執行緒都需要訪問某個資源的時候,就需要 同步機制 了,也就是說當對同乙個資源進行讀寫的時候,我們要使該資源在同一時刻只能被乙個執行緒操作,以確保每個操作...

C 多執行緒中 lock用法

本文介紹c lockkeyword,c 提供了乙個keywordlock,它能夠把一段 定義為相互排斥段 critical section 相互排斥段在乙個時刻內僅僅同意乙個執行緒進入執行,而其他執行緒必須等待。每個執行緒都有自己的資源,可是 區是共享的,即每個執行緒都能夠執行相同的函式。這可能帶來...

多執行緒 Lock

reentrantlock和synchronized區別 作用跟synchronized 鎖一樣 reentrantlock 底層是 cas 值,期望,預期 synchronized 底層鎖公升級 reentrantlock 可以trylock 嘗試鎖 a.如果在某時間段內獲取到鎖,就執行 b.如果...