首页 > 其他分享 >操作系统·同步问题

操作系统·同步问题

时间:2024-06-04 16:22:00浏览次数:24  
标签:count 同步 num 操作系统 问题 while rw mutex semaphore

经典同步问题

1.生产者消费者问题

  • 一组生产者进程(Producer)

  • 一组消费者进程(Consumer)

  • 共享初始为空 大小为n的缓冲区(Buffer)

semaphore mutex = 1;  //mutex
semaphore empty = n;  //buffer
semaphore full = 0;   //full

Producer(){
	while(1){
		Produce();
		P(mutex);
		add2Buffer();
		V(mutex);
		V(full);
	}
}

Consumer(){
	while(1){
		P(full);
		P(mutex);
		getFromBuffer();
		V(mutex);
		Consume();
	}
}

2.读者写者问题

  • 读者进程(Reader)
  • 写者进程(Writer)
  • 共享一个文档(Document)
  • 多进程读,不可多进程写
  • 写进程写,不可读
  • 写进程检查是否有读进程读

读进程优先

int count = 0;
semaphore mutex = 1;
semaphore rw = 1;
Reader(){
	while(1){
		P(mutex);
		if(count == 0)
			P(rw);
		count++;
		V(mutex);
		Read();
		P(mutex);
		count--;
		if(count == 0)
			V(rw);
		V(mutex);
	}
}
Writer(){
	while(1){
		P(rw);
		write();
		v(rw);
	}
}

写进程优先

int count = 0;
semaphore mutex = 1;
semaphore rw = 1;
semaphore w = 1;
Writer(){
	while(1){
		P(w);
		P(rw);
		Write();
		V(rw);
		V(w);
	}
}
Reader(){
	while(1){
		P(w);
		P(mutex);
		if(count == 0)
			P(rw);
		count++;
		V(mutex);
		V(w);
		Read();
		P(mutex);
		count--;
		if(count == 0)
			V(rw);
		V(mutex);
	}
}

3.哲学家进餐问题

  • 5名哲学家(Philosopher)
  • 每两名之间有一根筷子(Chopstick)
  • 每名有一碗饭
  • 吃完饭思考
semaphore Chopsticks[5] = {1, 1, 1, 1, 1};
semaphore mutex = 1;
Philosopher(){
	do{
		P(mutex);
		P(Chopsticks[i]);
		P(Chopsticks[(i+1)%5]);
		V(mutex);
		eat();
		V(Chopsticks[i]);
		V(Chopsticks[(i+1)%5]);
		think();
	}
}

4.吸烟者问题

  • 3个吸烟者进程(Smoker)
  • 1个提供者进程(Offer)
  • Smoker1(paper, glue)
  • Smoker2(tobacco, glue)
  • Smoker3(paper, tobacco)
  • Offer(offer1) return paper, glue
  • Offer(offer2) return tobacco, glue
  • Offer(offer3) return paper, tobacco
int num = 0;	//store random num
semaphore offer1 = 0;
semaphore offer2 = 0;
semaphore offer3 = 0;
semaphore end = 0;
Offer(){
	whlie(1){
		num++;
		num = num % 3;
		if(num == 0)
			V(offer1);
		else if(num == 1)
			V(offer2);
		else
			V(offer3);
		P(end);
	}
}
Smoker1(){
	while(1){
		P(offer3);
		smoke();
		V(end);
	}
}
Smoker2(){
	while(1){
		P(offer2);
		smoke();
		V(end);
	}
}
Smoker3(){
	while(1){
		P(offer1);
		smoke();
		V(end);
	}
}

eg1

  • 3个进程P1 P2 P3
  • 互斥使用N个单元的缓冲区(Buffer)
  • P1 produce() return (int num) put() @Buffer
  • P2

标签:count,同步,num,操作系统,问题,while,rw,mutex,semaphore
From: https://www.cnblogs.com/blueflylabor/p/18231154

相关文章

  • 强化学习(一) 基本概念和赌博机问题
    文章目录什么是强化学习强化学习的两个基本特征强化学习的其它特征强化学习不同于有监督学习强化学习不同于无监督学习强化学习不同于进化方法强化学习的独特挑战强化学习典例强化学习的要素强化学习的适用范围强化学习学术主线解决强化学习问题的一般框架赌博机两个影......
  • 【HZERO】数据同步器
    数据同步器常规配置问题排查......
  • 操作系统复习(持续更新)
    进程概念动态的,程序的一次执行过程,同一个程序多次执行会对应多个进程当进程被创建时,操作系统会为该进程分配一个唯一的不重复的PID号进程的组成进程控制块PCB操作系统会记录PID、进程所属用户、分配资源的情况、进程的运行情况,保存在PCB(进程控制块)中。程序段和数据段进......
  • 本地服务调用遇到的问题
    1、我本地起了两个服务8087和8086单独在浏览器是都可以访问  2、在postman中单独调用8087的一个接口没有问题 3、但是在8086服务中调用这个接口http://localhost:8087/api/account/login就会超时 4、如果把这个接口http://localhost:8087/api/account/login换成手......
  • 【Socket】解决TCP粘包问题
    一、介绍TCP一种面向连接的、可靠的、基于字节流的传输层协议。三次握手:客户端发送服务端连接请求,等待服务端的回复。服务端收到请求,服务端回复客户端,可以建立连接,并等待。客户端收到回复并发送,确认连接。服务端收到回复。连接成功。四次挥手:与三次握手不同,客户端和服务......
  • 跨域问题的原因以及解决方案有那些
    跨域问题的原因主要是浏览器的同源策略。同源策略是浏览器的一种安全策略,它要求协议、域名、端口三者必须完全一致,否则就会被浏览器视为跨域请求,从而限制其执行。具体来说,跨域问题的原因有以下几点:1、Cookie、LocalStorage和IndexDB无法读取:由于跨域请求的限制,浏览器无......
  • 粉笔科技扭亏为盈另面:一年时间股价跌超六成,消费者投诉问题不少
    《港湾商业观察》施子夫公开数据显示,2024年国考报名人数首破300万。在公考热度不减的背景下相对应公考培训领域的几家上市公司也备受大众关注。4月25日,粉笔有限公司(以下简称,粉笔或粉笔科技,02469.HK)披露023年度业绩公告,显示公司营收与净利双双增长。在教育培训赛道,以烧钱换......
  • microsoft store商店无法下载问题
    解决办法:开启window更新;1.开始--》搜索“服务”--》以管理员身份运行;2.找到Windowsupdate,开启即可如果服务状态是停止,无法开启。则参照下面的方法打开注册表找到层级:计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wuauserv更改所有者......
  • 关于linux 系统inode快耗尽问题处理!
    一、inode是什么?要想理解inode,要从文件储存说起。文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"......
  • [记录一下]BufDataSet排序的时候多列同时排序会出问题
    有和网友(不好意思,忘了是那位了)交流中,他反馈BufDataSet多列排序时得到的结果不符合预期,他也给出修复方法,以下是他的验证及修复方法:环境:fpc3.3.1问题复现步骤:SQLQuery1.IndexFieldNames:='cl;c2DESC';这个应该是c1列升序,c2列降序,但是实际是c1,c2列都降序了影响到SQLQuery,BufDataS......