1. 生產者-消費者問題
#define n 100 //有界緩衝區大小
typedef int semaphore //定義訊號量
semaphore mutex = 1; //臨界區互斥訊號量
semaphore empty = n; //空閒緩衝區
semaphore full = 0; //緩衝區初始化為空
void producer(void)
int item; //區域性變數
wile(1){
item = produce_item(); //生產資料
p(empty); //獲取空資料槽
p(mutex); //獲取進入臨界區的訊號量
insert_item(item); // 將資料放入緩衝池
v(mutex); //釋放互斥量
v(full); //資料量加一
void consumer(void)
int item; //區域性變數
while(1){
p(full); //獲取資料槽
p(mutex); //獲取進入臨界區的訊號量
item = remove_item(); //將資料從緩衝池讀出
v(mutex); //釋放互斥量
v(empty); //資料量減一,即空槽加一
consume_item(item); //消費資料
讀者-寫者問題
typedef int semaphore; //定義訊號量
semaphore rmutex = 1; //讀者計數器的互斥量
semaphore wmutex = 1; //寫一寫,讀一寫互斥量
int readcount = 0; //讀者計數器
void reader(void) //讀者程序
while(1){
p(rmutex); //取得讀者計數器的互斥量
readcount = readcount+1; //進來乙個讀者。讀者數量加一
if(readcount == 1) p(wnutex); //如果是第乙個讀者,取得讀一寫互斥量
v(rmutex); //釋放讀者計數器的互斥量
read_data_base(); //讀資料
p(rmutex); //讀者讀完資料要離開,先取得讀者計數器的互斥量
readcount = readcount - 1; //讀者數量減一
if(readcount == 0) v(wmutex); //如果是最後乙個離開的讀者,釋放讀一寫互斥量
v(rmutex); //釋放讀者計數器的互斥量
use_dataread();
void writer(void) //寫者程序
while(1){
think_up_data(); //寫者產生資料
p(wmutex); //獲得寫一寫,讀一寫操作互斥量
write_data_base(); //寫入資料庫
v(wmutex); //釋放寫一寫,讀一寫操作互斥量
作業系統 併發 互斥與同步
在多道程式設計系統種,程序會被交替執行,進而在巨集觀上表現出一種併發的外部特徵。為什麼需要併發?假設乙個支援單使用者的單處理器多道程式設計系統,使用者可以從乙個應用程式切換到另乙個應用程式,每個應用程式都使用同一鍵盤輸入,使用同一鍵盤輸出。由於每個程式都需要使用某乙個輸入輸出過程,所以將他視為乙個共...
作業系統實驗 同步互斥
實習1 程序同步 實習要求 在windows 2000 環境下,建立乙個包含n 個執行緒的控制台程序。用這n 個執行緒來表示n 個讀者或寫者。每個執行緒按相應測試資料檔案的要求,進行讀寫操作。請用訊號量機制分別 實現讀者優先和寫者優先的讀者 寫者問題。讀者 寫者問題的讀寫操作限制 1 寫 寫互斥 2...
程序互斥與同步計算機作業系統 作業系統同步互斥大題
作業系統程序同步互斥問題 pv操作加訊號量來實現程序的同步互斥 解題步驟 首先要分析題目中近程的同步關係和互斥關係 同步關係用前v後p實現 互斥關係,一般都是對於乙個緩衝區或者本質上是緩衝區的變數進行訪問,這時候就要用pv操作將對於這個訊號量的訪問夾在中間 解題精髓就這兩句 下面以408 2009年...