執行緒同步機制

2021-09-27 03:49:09 字數 1302 閱讀 3206

執行緒同步的四種機制

主要區別在於:

適用範圍:臨界區在使用者模式下,不會發生使用者態到核心態的切換,只能用於同程序內線程間同步。其他會導致使用者態到核心態的切換,利用核心物件實現,可用於不同程序間的執行緒同步。

效能:臨界區效能較好,一般只需要數個cpu週期。其他機制效能相對較差,一般需要數十個cpu週期;臨界區不支援等待時間,為了獲得臨界資源,需要不斷輪詢(死迴圈或sleep一段時間後輪詢),其他機制核心負責觸發,在對臨界資源競爭較少的情況下臨界區的效能表現較好,在對臨界區資源競爭激烈的情況下臨界區有額外的cpu損耗(死迴圈方式下)或響應時間延遲(sleep方式下)。

應用範圍:可用臨界區機制實現程序內的互斥量、事件、訊號量功能;互斥量實現了互斥使用資源;事件實現單生產多消費(同時只能乙個消費)功能;訊號量實現多生產多消費功能。

各機制詳細的功能說明如下:

臨界區:

臨界區是一段對某些共享資源訪問的**,在任意時刻只允許乙個執行緒對共享資源進行訪問。如果有多個執行緒試圖同時訪問臨界區,那麼在右乙個執行緒進入後其他所有試圖訪問此臨界區的執行緒將被掛起,並一直持續到進入臨界區的執行緒離開。臨界區被釋放後,其他執行緒可以基繼續搶占,並以此達到用原子方式操作共享資源的目的。

ps:私人浴室(沒有管理員)只有一間淋浴房,我想洗澡,我時不時來看下淋浴房空了沒,空了我就去洗。

互斥量:

功能上臨界區類似,不過可用於不同程序間的執行緒同步。

ps:公共浴室(有管理員)只有一間淋浴房,我想洗澡,問了下管理員,有空的淋浴房麼,如果有,管理員就讓我洗,否則管理員就讓我去休息室睡一覺,等有空的淋浴房了叫醒我去洗澡。

事件:觸發重置事件物件,那麼等待的所有執行緒中將只有乙個執行緒能喚醒,並同時自動的將此事件物件設定為無訊號的;它能夠確保乙個執行緒獨佔對乙個資源的訪問,和互斥量的區別在於多了乙個前置條件判定。

ps:公共浴室(有管理員)只有一間淋浴房,我想洗澡,問了下管理員,有空的淋浴房麼,如果淋浴房沒人洗而且打掃完了(等待的事件),管理員就讓我洗,否則管理員就讓我先去休息室睡一覺,等沒人洗而且打掃完了叫醒我去洗澡。

訊號量:

訊號量用於限制對臨界資源的訪問數量,保證了消費數量不會大於生產數量。

ps:公共浴室(有管理員)有n間(資源數量限制)淋浴房,我想洗澡,問了下管理員,有空的淋浴房麼,如果有,管理員就讓我洗,否則管理員就讓我先去休息室睡一覺,等有空的淋浴房了叫醒我去洗澡。、

使用建議

盡量使用使用者模式下的臨界區機制,避免使用需要使用者態到核心態切換的同步機制。

參考:[1] 

[2] 

執行緒同步機制

本週主要學習 執行緒同步機制 互斥量 讀寫鎖和條件變數 和簡單程式的實現,對執行緒同步有了進一步認識 內容如下 執行緒的基本概念,相關函式 互斥量 說明 處於標圓形框之上的線段表示相關的執行緒沒有擁有互斥量 處於圓形框中心線之上的線段表示相關的執行緒等待互斥量 處於圓形框中心線之下的線段表示相關的執...

執行緒同步機制

執行緒同步主要用於協調對臨界資源的訪問,臨界資源可以是硬體裝置 比如印表機 磁碟 檔案 記憶體 變數 陣列 佇列等 執行緒同步有4種機制 他們的主要區別在於 各同步機制詳細的功能說明如下 臨界區臨界區是一段獨佔對某些共享資源訪問的 在任意時刻只允許乙個執行緒對共享資源進行訪問。如果有多個執行緒試圖同...

執行緒同步機制

多個執行緒操作同乙個資源 併發 同乙個物件被多個執行緒同時操作 解決方式 佇列 鎖,佇列為了按序訪問物件,當乙個執行緒獲得物件的排他鎖,獨佔資源,其他執行緒必須等待,使用後釋放鎖即可.存在以下問題 synchronized方法和synchronized塊 同步方法中無需指定同步監視器,因為同步方法的...