操作系統經典pv問

 生產者消費者

 多生產者多消費者——父母兒女喫水果

 

補充::桌上有一個盤子,每次只能放一個水果,媽媽向盤中放蘋果和橘子,兒子專等喫盤裏的橘子,女兒專等喫盤裏的蘋果。只要盤子空,媽媽可向盤中放水果,僅當盤中有自己需要的水果時,兒子或女兒可從中取出,請給出他們三人之間的同步關係,並用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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章