程序間通訊主要研究以下幾個問題:
(1):程序如何把資訊傳遞給另乙個
(2):在多個程序的活動中不會出現交叉
(3):程序執行順序正確性
1:競爭條件,兩個或多個程序讀寫某些共享資料,最後結果取決於程序執行的精確時序,稱為競爭條件,包含競爭條件的程式會在極少數情況下出現錯誤。
怎樣避免競爭條件?
避免競爭現象,實際上就是找到某種途徑阻止多個程序同時讀寫共享的資料,(即互斥);
互斥就是以某種手段來確保乙個程序在使用乙個共享變數檔案或檔案時,其他程序不能做同樣的操作。
好的解決競爭條件的方案:
我們把對共享記憶體進行訪問的程式片段稱作臨屆區域,或者是臨屆區。
(1):任何兩個程序不能同時處於其臨界區;
(2):不應cpu的速度和數量做任何假設;
(3):臨界區外執行的程序不得阻塞其他程序;
(4):不得是程序無限期等待進入臨界區。
linux中避免競爭條件的途徑
在linux中提供了一些機制用來避免競爭條件,當乙個臨界區的資料在多個函式之間被呼叫時,為了保護資料不被破壞,可以採用一定的機制來保護臨界區的資料,主要有自旋鎖spinlock 訊號量,互斥鎖。第一種 首先說自旋鎖spinlock 在linux中定義spinlock的方法很簡單,與普通的結構體定義方...
一些避免競爭條件的例項
人們總是期望核心開發者確定和解決由核心控制路徑的交錯執行所引起的同步問題。但是,避免競爭條件是一項艱鉅的任務,因為這需要對核心的各個成分如何相互作用有乙個清楚的理解。為了直觀地認識核心內部到底是什麼樣子,需要提及前面博文中所定義同步技術的幾種典型應用場景。1 引用計數器 引用計數器廣泛地用在核心中以...
競爭條件(race condition)
在一些作業系統中,協作的程序可能共享一些彼此都能讀寫的公用儲存區。這個公用儲存區可能在記憶體中 可能是在核心資料結構中 也可能是乙個共享檔案。這裡共享儲存區的位置並不影響通訊的本質及其帶來的問題。為了理解實際中程序間通訊如何工作,我們考慮乙個簡單但很普遍的例子 乙個假離線列印程式。當乙個程序需要列印...