N個程序的臨界區問題(麵包房演算法)

2021-08-18 08:54:23 字數 630 閱讀 2740

上面ppt來自浙江大學李善平老師的作業系統課程。

產生的number[i]會重複是因為cpu排程引起的(number[i]的賦值操作不是原子操作)。

choosing陣列的意義在於防止i程序的number[i]數值不穩定,出現錯誤。如果沒有choosing陣列的話,反例如下,比如只考慮程序i和j:

假設程序i分析上面過程,錯誤主要是由於cpu排程導致number[i]的值不穩定,並且cpu先排程給了程序號比較大的程序j去執行while等待引起的。當加入choosing陣列後,仍然是上面的情況,當j程序進入while判斷時,由於number[i]還沒有賦值完成,導致choosing[i]為true,所以j程序在while(choosing[i])中等待,直到i程序賦值完畢,number[i]=1;j程序在進入後面的while判斷,此時number[i]!=0為true,(number[i],i)

臨界區問題的產生一

臨界區問題是嵌入式軟體程式設計乙個不得不面對的關鍵性問題。特別對於底層驅動,在記憶體中只有乙份,上層的多工或者多程序,都會對同乙個驅動去訪問,這樣不可避免的遇到了任務之間打架的問題,處理好這個問題是區分乙個菜鳥和老鳥的根本性關鍵之一。接下來談談臨界區產生的原因 假設有以下 int x void pr...

cuda臨界區問題的總結

gpu在多執行緒處理資料的時候,可能會同時訪問到同乙個資料,這就會出現臨界區的處理問題。cuda提供了多個atmoic原子操作,但是只支援一些基礎的資料型別,不能自定義結構體。對於多種資料的同步操作,就可能受到影響。另一種解決臨界區的方法就是使用鎖的方法保護臨界區。下面是在論壇找到的一些關於臨界區的...

程序間同步臨界區的Peterson演算法

在所有專案中,進入和退出臨界區時都有輸出以表示已進入和退出臨界區。臨界區內的操作是將公共變數 icount 這個兩個執行緒的公共變數疊加到 50,000,000 然後輸出,以此證明執行緒成功進入臨界區,滿足互斥 因為倘若沒有實現互斥,兩線程間的干擾會導致資料一致性問題而使 icount 不能準確加到...