操作系统经典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

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