操作系统

Nolca / 2023-05-04 / 原文

信号量

实现一个银行系统,该银行设置有M个窗口。每个用户需要先取号,只有一台取号机。用户分为对公用户,私人用户。私人用户又分为普通用户,VIP用户。其中窗口的柜员在服务时,按优先级给用户服务,其中对公用户的优先级最高,VIP用户次之,普通用户优先级最低。请使用同步与互斥解决此银行的叫号服务系统。
https://blog.csdn.net/Yun_Ge/article/details/89048991

  1. 几个关系=几个信号量,相当于点之间的线段
    对公-VIP,VIP-私人,共2个关系,设置2个信号量
  2. 实现进程互斥
semaphore mutex; 
mutex=1; // 互斥,初始化为 1
while(1){
	wait(mutex);	//p操作-1且阻塞
	临界区;
	signal(mutex);	//v操作+1且唤醒
	剩余区;
}
  1. 实现前趋关系
main(){
	Semaphore a,b,c,d,e,f,g; 
	a.value=0;b.value=0;c.value=0;
	d.value=0;e.value=0;f.value=0;g.value=0;
	//以下代码并发执行
	{ S1;signal(a);signal(b); }
	{ wait(a);S2;signal(c) ;signal(d);}
	{ wait(b);S3;signal(e); }
	{ wait(c);S4;signal(f); }
	{ wait(d);S5;signal(g); }
	{ wait(e);wait(f);wait(g);S6; }
}

image
4. 实现进程同步
image