要求:訊號量及其初始化producer和consumer,二者不能對buffer進行操作
當buffer滿的時候,就不允許producer繼續寫
當buffer空的時候,就不允許consumer繼續讀
producer簡單**描述semaphore mutex = 1; //buffer的鎖
semapore full = 0; //滿位的數量
semaphore empty = n; //空位的數量
consumer簡單**描述/*pv形式*/
while(true)
/*wait signal形式*/
while(true)
分析:/*pv形式*/
while(true)
/*wait signal形式*/
while(true)
具有對稱性
先申請empty/full位,再申請緩衝區訪問許可權;先釋放mutex再釋放empty/full位
要求:本質:保證乙個writer程序必須與其他程序互斥地訪問共享物件多個讀者,只能read,不能write
多個寫者,既能read,也能write
允許多個reader同時讀
不允許reader和writer同時操作
不允許多個寫者同時操作
要求:?
太簡單了(以後再補)
要求:訊號量及其初始化有讀者在讀,則其他讀者可讀,直到沒有讀者了,寫者才能寫
有寫者在寫,則其餘寫者和讀者等待
writer簡單**描述int readercount = 0;//共享變數,記錄當前讀者的數量
semaphore mutex = 1;//readercount的鎖
semaphore m = 1;//buffer的鎖
while(true)
reader簡單**描述
while(true)
signal(mutex);
//read
wait(mutex);
readercount--;
if(readercount==0)
signal(mutex);
}
要求:訊號量及其初始化寫者在寫,則其餘讀者和寫者等待;寫者寫完,優先釋放下乙個寫者
讀者在讀,若無寫者等待,則其他讀者可讀
讀者在讀,若有寫者等待,則其他讀者等待
writer簡單**實現int readercount = 0;//共享變數,記錄當前讀者的數量
int writecount = 0;//共享變數,記錄當前寫者的數量
semaphore mutex1 = 1;//readercount的鎖
semaphore mutex2 = 1;//writecount的鎖
semaphore read = 1;//buffer的讀鎖
semaphore write = 1;//buffer的寫鎖
semaphore s = 1;//為了讓寫者優先
reader簡單**實現while(true)
signal(mutex2);
wait(write);
//write...
signal(write);
wait(mutex2);
writecount--;
if(writecount==0)
signal(mutex2);
}
while(true)
signal(read);
signal(s);
//reading..
wait(mutex1);
readercount--;
if(readcounter==0)
signal(mutex1);
}
要求:有5個哲學家
哲學家只能吃飯或者思考,不能同時進行
哲學家只能拿兩根筷子才能吃飯
semaphore chopstick[5]=;//筷子是否可用
semaphore seat=4;//可坐的位置
void philosppher(int i)
}
semaphore chopstick[5]=;//筷子是否可用
void philosppher(int i)
else
}}
借助and型訊號量,其基本思想是:將程序在整個執行過程中需要的所有資源一次性全部分配給程序,待程序使用完後再一起釋放。只要尚有乙個資源未能分配給程序,其他所有可能為之分配的資源也不分配給它。
semaphore chopstick[5]=;//筷子是否可用
void philosppher(int i)
}
程序同步三個常見問題
生產者 消費者 三個訊號量 empty 緩衝區 空閒 資源數,full 緩衝區 已滿 資源數 保證不會空時消費,滿時生產 保證順序 同步 mutex 代表互斥鎖 保證同一時間只有乙個執行緒可以訪問共享資源 互斥訪問 producer consumer 不能將執行緒裡兩個wait的交換順序,否則會出現...
經典程序同步問題
文章出處 http heikediguo2005.blog.163.com blog static 2211971200910254235533 依據訊號量與程序的關係,我們可把程序中使訊號量分成私用訊號量和公用訊號量。私有訊號量是指只與制約程序和被制約程序有關的訊號量 公用訊號量是指與一組併發程序...
經典程序同步問題
wait表示為訊號量減一,當訊號量不夠減時 訊號量 0 時 說明當前資源不足,發出資源請求的程序阻塞直到資源可達。signal 表示為訊號量加一,表示釋放了當前訊號量所指代的資源。兩者都是原子操作,不可打斷。生產者不停的向訊息佇列中生產訊息,消費者則不停的從訊息佇列中獲取訊息。當訊息佇列滿時,生產者...