生產者消費者
多生產者多消費者——父母兒女喫水果
補充::桌上有一個盤子,每次只能放一個水果,媽媽向盤中放蘋果和橘子,兒子專等喫盤裏的橘子,女兒專等喫盤裏的蘋果。只要盤子空,媽媽可向盤中放水果,僅當盤中有自己需要的水果時,兒子或女兒可從中取出,請給出他們三人之間的同步關係,並用PV操作實現三人正確活動的程序。
void mother()
{
while(true)
{
wait(empty);
produce fruit;
if( fruit=='蘋果')
signal(apple);//apple++,告知女兒有蘋果了
else
signal(orange);//orange++,告知兒子有橘子了
}
}
void daughter()
{
while(true)
{
wait(apple);
//取水果
signal(empty);//empty++,告知媽媽盤子空了
}
}
void son()
{
while(true)
{
wait(orange);
//取水果
signal(empty);//empty++,告知媽媽盤子空了
}
}
分析:女兒和兒子各取所需,不存在爭奪資源的問題,所以不存在互斥關係。女兒兒子需要獲知蘋果橘子是否產生信號,所以設蘋果資源信號量爲apple,橘子資源信號量爲orange。而媽媽需要獲知盤子是否爲空的信號,所以需要設置資源信號量empty。
解:設empty=1; orange=0; apple=0;
原文鏈接:https://blog.csdn.net/Yun_Ge/article/details/89043527
讀者寫者
rw=1時,無訪問
rw<1有訪問
一個生產者多個消費者——吸菸者問題
哲學家問題
最多允許四人進餐
奇數拿左筷子,偶數右
圖書館問題
有一閱覽室,共有100個座位。讀者進入時必須先在一種登記表上登記,該表爲每一座位列一個表目,包括座號和讀者姓名。讀者離開時要註銷掉登記內容。試用pv原語描述讀者進程的同步問題。
semaphore empty=100;
semaphore full=0;
semaphore mutex=1;
Stu()
{
while(1)
{
P(empty);
P(mutex);
登記;
坐下;
V(mutex);
閱讀;
P(mutex);
註銷;
V(mutex);
V(empty);
}
}
原文鏈接:https://blog.csdn.net/weixin_35307564/article/details/102644156