操作系统信号量问题

一、生产者-消费者问题

系统中有一组生产者进程和一组消费者进程,生产者进程每次生产一个产品放入缓冲区,消费者
进程每次从缓冲区中取出一个产品并使用。(注:这里的“产品”理解为某种数据)
生产者、消费者共享一个 初始为空、大小为 n 的缓冲区
只有 缓冲区没满 时,生产者才能把产品放入缓冲区,否则必须等待。
只有 缓冲区不空 时,消费者才能从中取出产品,否则必须等待。
缓冲区是临界资源,各进程必须 互斥地访问

 

 

二、多生产者-多消费者问题(分苹果和桔子) 

 

同步关系:爸爸-妈妈

互斥关系: 爸爸-女儿   妈妈-儿子

 三、吸烟者问题

semaphore offer1 = 0;
semaphore offer2 = 0;
semaphore offer3 = 0;
semaphore finish = 0;
int i = 0;


provider()
{
  while(1){
    if(i==0){
将组合一放桌上;
      V(offer1);
    }else if(i==1){
      将组合二放桌上;
      V(offer2);
    }else if(i==2){
      将组合三放桌上;
      V(offer3);
    }
    i=(i+1)%3;
    P(finish);
  }
}

 

四、读者-写者 问题

semaphore rw = 1; //用于实现对共享文件的互斥访问
int count = 0;    //记录当前有几个读进程在访问文件
semaphore mutex = 1;//用于保证对count变量的互斥访问

writer(){
  while(1)
  {
    P(rw);     //写之前加锁
    write();
    V(rw);     //写完以后解锁
  }
}


reader()
{
  while(1)
  {
    P(mutex);              //各读进程互斥访问count
    if(count==0)         //由第一个读进程负责
      P(rw);             //读之前“加锁”
    count++;             //访问文件前读进程数+1
    V(mutex);
    read();
    P(mutex);           //各读进程互斥访问count
    count--;            //访问文件的读进程数-1
    if(count==0)       //由最后一个读进程负责
      V(rw);          //读完了‘解锁’
    V(mutex);
  }
}

 

五、哲学家进餐问题


注意死锁的问题  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值