乙個資料檔案或記錄,可被多個程序共享,我們把只要求讀該檔案的程序稱為「reader程序」,其他程序則稱為「writer 程序」。
1.允許多個程序同時讀乙個共享物件,因為讀操作不會使資料檔案混亂。
2.但不允許乙個 writer 程序和其他 reader 程序或 writer 程序同時訪問共享物件,因為這種訪問將會引起混亂。
一。如果只有乙個讀者和乙個寫者我們很容易寫下**
void reader()
}void writer()
} 二。如果有多個讀者,和乙個寫者,當讀者占有共享區時怎麼判斷下乙個想要使用共享區的是讀者呢?使用計數,當計數不為0時,表示當前是讀者。新來的讀者就可以直接讀了。
void reader()
} void writer()
} 簡單的同步問題:
描述:如何實現兩個程序乙個控制完共享區,另乙個接著控制,交換進行,可以規定哪個在前哪個在後
mutex=1;
empty=1;
full=0;
void father()
}void son()
如何實現生產者消費者問題:
semapthore mutex=1;
semapthore empty=10;
semapthore full=0;
void produce()
}void consum()
} 桌上有乙隻盤子,允許存放乙個水果,父親專向盤中放蘋果,母親專向盤中放桔子,兒子專等吃盤裡的桔子,女兒專等吃盤裡的蘋果。只要盤子空,則父親或母親可向盤中放水果,僅當盤中有自己需要的水果時,兒子或女兒可從中取出。 1
父親、母親要互斥使用盤子,所以兩者之間是互斥關係; 2
父親放的蘋果,女兒吃,所以兩者是同步關係; 3
母親放的桔子,兒子吃,所以兩者也是同步關係。
semaphore
s_plate
=1,
=0,
s_orange
=0;
void father( ) // 父親程序
} void mother( ) // 母親程序
} void son( ) // 兒子程序
} void daughter( ) // 女子程序
}
作業系統之程序間通訊 執行緒同步
程序間通訊,指的是程序之間資訊交換,所交換的資訊量少則是乙個狀態或樹枝,多則成千上萬個位元組。每個程序中訪問 臨界資源 的那段程式稱為 臨界區 臨界資源 是一次僅允許乙個程序使用的共享資源 共分為4種 1 共享記憶體 共享記憶體就是對映一段能被其他程序所訪問的記憶體。這段記憶體由乙個程序建立,但多個...
作業系統 程序間通訊
程序間通訊涉及到3個問題 1.乙個程序如何把資訊傳遞給另乙個程序 2.確保兩個或多個程序之間不會在關鍵活動中出現交叉 3.程序間執行的順序對執行結果的影響。注意 確保程序對臨界區的 互斥 訪問。忙等待的互斥 1.遮蔽中斷 當乙個程序進入臨界區後立即遮蔽所有中斷,時鐘中斷也被遮蔽 這樣cpu就不會進行...
作業系統 程序間通訊
include include include include include include ifndef semun h 條件編譯,即若semun在標頭檔案中沒有被定義,就進行下面的編譯 define semun h union semun endif static int set semval...