執行緒同步的方式

2021-09-27 01:27:42 字數 799 閱讀 6083

一、什麼是執行緒的同步

當多個執行緒同時訪問其共享的資源時,需要相互協調,以防止出現資料不一致、不完整的問題,能達到這種狀態執行緒同步

二、執行緒同步的方式

1、互斥量(互斥鎖)

如果乙個執行緒要訪問一塊資料時,它就呼叫mutex_lock,如果互斥量是處於解鎖狀態,也就是說這塊資料可用,那麼就呼叫成功,如果這個互斥量已經加鎖,那麼該執行緒被阻塞,直到訪問這塊資料的執行緒呼叫mutex_unlock,如果有多個執行緒被阻塞在這個互斥量上,那麼將隨機選擇乙個執行緒允許它解鎖

2、訊號量

它允許多個執行緒在同一時刻訪問同一資源,但是需要限制在同一時刻訪問此資源的最大執行緒數目

以乙個停車場的運作為例:簡單起見,假設停車場只有三個車位,一開始三個車位都是空的。這時如果同時來了五輛車,看門人允許其中三輛直接進入,然後放落車攔,剩下的車則必須在入口等待,此後來的車也都不得不在入口處等待。這時,有一輛車離開停車場,看門人得知後,開啟車攔,放入外面的一輛進去,如果又離開兩輛,則又可以放入兩輛,如此往復。

在這個停車場系統中,車位是公共資源,每輛車好比乙個執行緒,看門人起的就是訊號量的作用

3、條件變數

條件變數可以讓執行緒在滿足特定的條件下暫停(睡眠),需要與互斥量配合使用

為什麼需要和互斥量一起使用呢?

互斥鎖只有兩個條件加鎖和解鎖,如果a執行緒加鎖了,b執行緒再加鎖就會被阻塞,直到a執行緒解鎖,在a執行緒解鎖之前,b執行緒會一直判斷有沒有解鎖,這樣是比較消耗系統資源的,所以就引入條件變數,a執行緒解鎖之前b執行緒就一直處於休眠狀態,等到解鎖了才通知b執行緒醒來,這樣就避免了執行緒不斷執行浪費資源

執行緒的同步方式

併發 同乙個時間段有多個程式在同乙個cpu上輪流執行 並行 同一時間多個程式在不同cpu上同時執行。併發是在時間段的表象,並行是在時刻的表象。同步 執行緒之間具有依賴關係,乙個執行緒的執行依賴於另乙個執行緒的訊息。互斥 對於程序的某一共享資源,同一時刻只允許乙個執行緒訪問。互斥是一種特殊的同步。實現...

執行緒同步的方式

同步 同步就是協同步調,按預定的先後次序進行執行。如 你說完,我再說。這裡的同步千萬不要理解成那個同時進行,應是指協同 協助 互相配合。執行緒互斥 指對於共享的程序系統資源,在各單個執行緒訪問時的排它性。當有若干個執行緒都要使用某一共享資源時,任何時刻最多隻允許乙個執行緒去使用,其它要使用該資源的執...

執行緒同步方式

1.原子訪問 同一時刻只允許同一執行緒訪問資源 變數 關鍵字 volatile 防止編譯優化,對特殊位址進行穩定訪問 可直接操作記憶體 2.關鍵段 同一時刻只允許乙個執行緒訪問乙個 段 initializecriticalsectionandspincount 變數名,0 例 global vari...