美文网首页
IPC经典问题(读者写者,哲学家)

IPC经典问题(读者写者,哲学家)

作者: 小幸运Q | 来源:发表于2019-02-24 21:26 被阅读0次

  1. 读者写者问题:
    多个读进程可以同时共享资源,但不能和写进程共享。写进程之间相互排斥,只能独占资源。有两个需要上锁,一个是读进程的标记数count,一个是写进程与读进程和其他写进程的互斥。

方法一:

// 写进程之间相互互斥,
count=0; // 读进程计数
mutex=1;  // 保护count,访问互斥
write=1  // 读者与写者互斥访问

reader(){
  // 互斥修改count
  P(mutex);
  if count==0 then P(write); // 第一个进程读的时候阻塞写进程
  count++;   // 增加一个读进程
  V(mutex);     

  readfile;   // 执行读操作
  
  P(mutex);  // 互斥访问count变量
  count--;
  if(count==0)V(write);  // 当没有读进程的时候解锁写进程
}

writer(){
  while(1){
    P(writer);
    writing;
    V(writer);
  }
}

读进程不断读会使写进程无限等待饿死,所以需要改进:
改进版:有进程请求写,则新的读进程被拒绝,待现有读进程完成后,立即让写进程进行,当无写进程时让读进程工作。

此时需要两个锁,一个w锁在读进程修改count后阻塞所有写进程,但是在count完成后进行reading的时候释放,允许写进程/其他读进程进入下一步,但是。另一个rw锁负责在count==0之前屏蔽掉写进程的操作,让他能拿到w屏蔽其他后来的读进程但是必须等count==0所有前面的进程读完后才能继续。

方法二:

int count=0;
mutex=1;    // 
rw=1;    // 用于保证读者写者互斥访问文件
w=1;     // 写者进程优先

writer(){
  while(1){
    P(w);  // 无写进程
    P(rw);  // 互斥访问共享文件
    writing;   
    V(rw);  // 释放共享文件
    V(w);  //
  }
}

reader(){
  while(1){
    P(w);  // 无写者请求时进入
    P(mutex);
    if(count==0){P(rw);}  // 当第一个读共享文件时,组织写进程写
    count++;
    V(mutex);
    V(w); // 释放w锁,此时写进程可以争夺该锁,将其他读进程甩在后面,但受制于rw锁,必须等先来的读进程都退出后才能继续写。

    reading;

    P(mutex);
    count--;
    if(count==0){V(rw);}  // 允许写进程写
    V(mutex);
  }
}

  1. 理发问题:
    理发师在顾客来时理发,又来了新的客人则让他在空椅子上等,若溢出则走人。
customers=0;
barbers=0;
wait=15;  // 15个空椅子
void barber(){
  while(T){
    P(customers); // 开始理发
    wait--;
    V(barber); // 空闲barber
  }
}

void customer(){
  if(wait<CHAIRS){
    wait++;
    V(customers); // 唤醒customer队列中的等待进程
    P(barbers);
    // 开始理发
  }
  else{
   // 离开
  }
}

  1. 哲学家就餐问题
    5名哲学家坐成环,每个哲学家之间放一个筷子,当哲学家饥饿的时候会先后拿起两只筷子拼成一双筷子。与左右邻居是互斥访问。

方法一:

chopstick[5]={1};
Pi(){
  do{
    P(chopstick[i]);
    P(chopstick[(i+1)%5]);
    eat;
    V(chopstick[i]);
    V(chopstick[(i+1)%5]);
    think;    
  }while(1);
}

方法二:


相关文章

  • IPC经典问题(读者写者,哲学家)

    读者写者问题:多个读进程可以同时共享资源,但不能和写进程共享。写进程之间相互排斥,只能独占资源。有两个需要上锁,一...

  • 读者写者问题

    读者写者问题是IPC问题的一种典型的代表。 我写了一个实现,这是一个写者优先的实现。一个写者,多个读者的模型。 读...

  • 操作系统:信号量与管程

    第10章:信号量与管程 信号量信号量使用互斥访问条件同步管程经典同步问题哲学家就餐问题读者-写者问题 10.1 信...

  • 2020-05-06多线程经典同步问题

    1、生产者消费者问题2、哲学家就餐问题3、读者-写者问题4、熟睡的理发师问题5、三个烟鬼的问题

  • 冷月手撕408之操作系统(10)-经典同步互斥问题

    操作系统的经典同步互斥问题主要是介绍了 几个经典的同步互斥问题,其中搞懂生产者消费者问题、读者写者问题;其他的问题...

  • Chapater-3 [进程间通讯]

    进程间通信核心概念 互斥的方案 信号量 互斥量 管程 消息传递 屏障 经典的IPC问题 哲学家就餐问题 #defi...

  • 二.进程(4)经典同步问题

    1.生产者—消费者问题 互斥、同步 2.哲学家就餐问题 互斥 3.读者——写者问题 有条件的互斥 1. 生产者—消...

  • 操作系统

    同步互斥 生产者与消费者(既有同步又有互斥) 读者-写者问题(同步) 哲学家进餐问题(同步) 信号量 初始值和当前...

  • 读者写者问题

    读者写者问题的小总结。。。实际上就是抄书写者优先的情况 读进程优先的情况 二者公平竞争的情况

  • 读者-写者问题

    问题描述 使用信号量进行解决 优先策略选择 读者优先 上述方案为读者优先。因为当读者进行读取的时候,如果后面一直有...

网友评论

      本文标题:IPC经典问题(读者写者,哲学家)

      本文链接:https://www.haomeiwen.com/subject/vfapyqtx.html