多執行緒程式的臨界區

2022-03-11 13:12:50 字數 961 閱讀 5952

所謂的臨界區:是指程序中的一段需要訪問共享資源並且當另乙個程序處於相應**區域時便不會被執行的**區域

對於臨界區的管理的必須要滿足一下的四個要求:

互斥:同一時間臨界區中最多存在乙個執行緒

progress:如是乙個執行緒想要進入臨界區,那麼它最終會成功

有限等待:如果乙個執行緒i處於入口區,那麼在i的請求被接受之前,其他執行緒進入臨界區的時間是有限制的。

無忙等待(可選):如果乙個程序在等待進入臨界區,那麼在它可以進入之前會被掛起。

解決方案

①:禁用硬體中斷

缺點:一旦中斷被禁用,執行緒就無法被停止,整個系統都會為你停下來。可能導致其他執行緒處於飢餓狀態。

②:基於軟體的解決方法

③:更高階的抽象

案例分析:假設有甲乙兩個人共用乙個冰箱裡的麵包,如果那個人發現冰箱裡沒有麵包後就去購買麵包。如果保證冰箱裡的麵包不會多也不會少。

**

static

int i = 0; //初始麵包為0

static

void main(string args)

static

void fun()

,購買人:", i, system.threading.thread.currentthread.managedthreadid);}}

問題:如何保證以上麵包只能是某乙個人購買。

解決方案一:加入lock操作原語

多執行緒程式的臨界區

所謂的臨界區 是指程序中的一段需要訪問共享資源並且當另乙個程序處於相應 區域時便不會被執行的 區域 對於臨界區的管理的必須要滿足一下的四個要求 互斥 同一時間臨界區中最多存在乙個執行緒 progress 如是乙個執行緒想要進入臨界區,那麼它最終會成功 有限等待 如果乙個執行緒i處於入口區,那麼在i的...

多執行緒程式設計 臨界區

1 windows api建立執行緒 include 包含相應標頭檔案 include dword winapi myfun1 lpvoid lpparameter 宣告執行緒函式 dword winapi myfun2 lpvoid lpparameter int main 主函式 else 如果...

Linux多執行緒臨界區問題

臨界區指的是乙個訪問共用資源 例如 共用裝置或是共用儲存器 的程式片段,而這些共用資源又無法同時被多個執行緒訪問的特性。當有執行緒進入臨界區段時,其他執行緒或是程序必須等待,有一些同步的機制必須在臨界區段的進入點與離開點實現,以確保這些共用資源是被互斥獲得使用,例如 semaphore。只能被單一執...