操作系统同步互斥问题

操作系统同步互斥问题

一些经典的例子就不列举了,接下来讲一些在学习操作系统课程的过程中所遇到的几个进程同步的题目。

1.取放水果问题

用基本记录型信号量解决如下同步关系:一空盘放一水果,父放梨,母放橘,儿取梨,女取橘,四人如何并发?由题目我们可以知道缓冲区只有一个,父母放水果之间及儿女取水果之间是互斥的关系,而且父放了梨之后儿子才能取梨,母亲放了橘子后女儿才能取橘子。站着资源的角度上,我们要定义三个信号量,empty:表示空盘,pear:表示梨子,orange:表示橘子。以下是伪代码:

 seamphore empty=1,pear=0,orange=0;//最开始是有一个空,还没有放橘子和梨;
//父亲
threadAddF(){
  wait(empty);
  ···
  放梨;
   ···
signal(peal);
}

//母亲
threadAddM(){
 wait(empty);
  ···
 放橘子;
 ···
 signal(orange);
 }

 //儿子
 threadAddS(){
 wait(pear);
 ···
 取梨;
 ···
 signal(empty);
 }

//女儿
threadAddF(){
  wait(orange);
  ···
 取橘子;
 ···
 signal(empty);
}

//主函数
void main(){

threadAddF();
threadAddM();
threadAddS();
threadAddD();
} 

这个例子比较简单,也很好理解。

2.黑白棋子问题

大家对于下棋肯定不陌生,这里列举两种情况:
黑子先下;
谁先抢到谁先下。第一种情况:黑子先下时

seamphore bfg=1,wfg=0;//bfg表示控制黑棋的信号量,wfg控制白棋;
 //黑棋
void black(){
 while(true){
   wait(bfg);
   if(在棋盘上找到位置)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值