面试 Tomcat 微信公众号开发 tsql serialization angular material handlebarsjs vue添加class bootstrap后台模版 android项目开发 linux 获取系统时间 mysql查询结果拼接 kafka启动命令 android网络请求 matlab取实部 mysql 连接 python注释 python中的if语句 python搭建网站 python的lambda函数 java入门编程 java中的接口 java学习文档 java泛型方法 java学习流程 linuxcat命令 php开发教程 不寻常的指南针 计算机操作系统第四版 骁龙660和625 oem修改器 模拟人生2夜生活 mac画图工具 服务器文件共享软件 枪林弹雨辅助 汇通启富下载 追评可以删除吗 ipad清理内存 python保存文件 pr怎么加字幕特效
当前位置: 首页 > 学习教程  > 编程语言

吸烟者问题

2020/10/8 20:14:44 文章标签:

吸烟者问题 2020/10/08 20:09 问题 吸烟者问题。三个吸烟者在一个房间内,还有一个香烟供应者。 为了制造并抽掉香烟,每个吸烟者需要三样东西:烟草、纸和火柴,供应者有丰富货物提供。三个吸烟者中,第一个有自己的烟草&#xff0…

吸烟者问题

2020/10/08 20:09

问题

吸烟者问题。三个吸烟者在一个房间内,还有一个香烟供应者。
为了制造并抽掉香烟,每个吸烟者需要三样东西:烟草、纸和火柴,供应者有丰富货物提供。三个吸烟者中,第一个有自己的烟草,第二个有自己的纸,第三个有自己的火柴。
供应者随机地将两样不同的东西放在桌子上,允许一个吸烟者进行对健康不利的吸烟。当吸烟者完成吸烟后唤醒供应者,供应者再随机地把两样不同的东西放在桌子上,唤醒一个吸烟者。
试用信号量的P、V操作设计该问题的同步算法,给出所用共享变量(如果需要)和信号量及其初始值,并说明各自的含义。

代码

//吸烟者问题伪代码
semaphore F=0;//互斥吸烟过程,完成吸烟才可以放东西
semaphore tobacco = 0;//烟草
semaphore paper = 0;//纸
semaphore match = 0;//火柴
int i = 0, j = 0;//表示放在桌子上的两件东西
int k;
provider()
{
	P(F);//加锁,根据吸烟者状态确定桌子上是否可以放东西
	while (true)//随机确定放在桌子上的东西
	{
		i = rand() % 3;
		j = rand() % 3;
		if (i != j)
		{
			break;
		}
	}
	if (i == 0 || j == 0)
	{
		V(tobacco);
	}
	if (i == 1 || j == 1)
	{
		V(paper);
	}
	if (i == 2 || j == 2)
	{
		V(match);
	}
	put();//将东西放在桌子上

}
smoker()
{
	switch (k)//根据缺哪个材料决定上锁情况
	{
		case 1: 
		{
			P(tobacco)
			P(paper);
			break;
		}
		case 2: 
		{
			P(tobacco)
			P(match);
			break;
		}
		case 3:
		{
			P(paper);
			P(match);
			break;
		}
	}
	smoke();//吸烟
	V(F);//释放资源,桌子可以放东西
	
}

是否放东西也是需要互斥的


本文链接: http://www.dtmao.cc/news_show_250237.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?