當多個程序都企圖對共享資料進行某種處理,而最後的結果又取決於程序執行的順序時,則我們認為發生了競爭條件(race condition)。
如果乙個程序要等待其父程序終止,則可以使用下列形式的迴圈:
while(getppid() != 1)
sleep(1);
這種形式的迴圈(稱為輪詢(polling))的問題是它浪費了cpu的時間,因為呼叫者每隔1秒都被喚醒,然後進行條件測試。
為了避免競爭條件和輪詢,在多個程序之間需要有某種形式的訊號傳送和接收的方法。可以使用訊號機制, 也可以使用各種形式的程序間通訊(ipc)。
程序控制之競爭條件 函式exec
當多個程序都企圖對共享資料進行某種處理,而最後的結果又取決於程序執行的順序時,這種情況被稱之為競爭條件 race condition 如果第乙個程序希望等待乙個子程序終止,則它必須呼叫wait函式中的乙個。如果乙個程序要等待其父程序終止,則可以使用下列形式的迴圈 while getppid 1 sl...
linux c程式設計 程序控制 二 競爭條件
前面介紹了父子程序,如果當多個程序企圖對共享資料進行處理。而最後的結果又取決於程序執行的順序時,就認為發生了競爭關係。通過下面的例子來看下 在這裡標準輸出被設定為不帶緩衝的,於是父子程序每輸出乙個字元就要進行一次write 呼叫。這樣做的目的是盡可能多次地在兩個程序之間進行切換,以便演示競爭條件。s...
程序及程序控制
學習程序之前,先了解一下程式 所謂程式就是指編譯好的二進位制檔案,在磁碟上,不占用系統資源 cpu 記憶體.而程序是與作業系統相關,是指在記憶體中執行起來的程式,占用一些系統資源,每當乙個程式執行,就相應產生乙個程序。程序的一些相關資訊被放在乙個叫程序控制塊的資料結構中,稱之為pcb。linux下的...