美文网首页
取放水果问题(生产者-消费者问题的变形)

取放水果问题(生产者-消费者问题的变形)

作者: 科学旅行者 | 来源:发表于2016-10-28 13:18 被阅读1788次

题目:

桌上有个能剩得下五个水果的空盘子。爸爸不停地向盘中放苹果和桔子,儿子不停地从盘中取出桔子享用,女儿不停地从盘中取出苹果享用。规定三人不能同时从盘子中取放水果。试用信号量实现爸爸、儿子和女儿这三个循环进程之间的同步(来源:《计算机操作系统学习指导与题解》)。

学过生产者-消费者的你应该能立刻看出此题其实是生产者-消费者的变形。
生产者是父亲,能生产出两种产品;消费者是儿子和女儿(一个消费桔子,一个消费苹果)。

有五个空盘子,相当于有五个缓冲池。

设置信号量semaphore empty = 5, orange = 0, apple = 0, mutex = 1;(初始5个盘子都为空,儿子和女儿都没拿到水果,三人不能同时操作,意味着只有一个临界资源。)

Dad() {
  while (1) {
    wait(empty);//如果先申请临界资源再申请空盘子,则可能出现申请临界资源成功却因为申请空盘子失败而阻塞,结果后面的进程想申请临界资源却无法申请而阻塞,造成连锁反应;
    wait(mutex);
    将水果放入盘中;
    signal(mutex);
    if (放入的是桔子) {
      signal(orange);
    }
    else signal(apple);
  }
}
Son() {
  while (1) {
    wait(orange);
    wait(mutex);
    从盘中取一个桔子;
    signal(mutex);
    signal(empty);
    享用桔子;
  }
}
Daughter() {
  while (1) {
    wait(apple);
    wait(mutex);
    从盘中取一个苹果;
    signal(mutex);
    signal(empty);
    享用苹果;
  }
}

相关文章

  • 取放水果问题(生产者-消费者问题的变形)

    题目: 桌上有个能剩得下五个水果的空盘子。爸爸不停地向盘中放苹果和桔子,儿子不停地从盘中取出桔子享用,女儿不停地从...

  • 多生产者和多消费者问题

    多生产者和多消费者问题 问题背景 有一个盘子 每次盘子中只能放入一种水果 爸爸向盘子中放苹果 女儿取苹果 妈妈向盘...

  • 操作系统知识点持续更新

    生产者消费者问题 关于生产者消费者问题可以参考这篇文章:生产者消费者问题的java实现 临界区与互斥量 临界区:保...

  • 生产者和消费者问题

    生产者和消费者问题 问题简述 组成 系统中有一组生产者和消费者进程 生产者生产者将产品放入缓冲区 消费者消费者进程...

  • 2-1.死锁-经典同步问题

    三、经典同步问题 1.生产者-消费者问题 计算机系统中的许多问题都可归结为生产者与消费者问题,生产者与消费者可以通...

  • 生产者和消费者问题详解

    生产者和消费者问题详解 定义 生产者消费者问题(英语:Producer-consumer problem),也称有...

  • 经典同步互斥问题

    生产者消费者问题 生产者消费者应当是最最基本的同步互斥问题了。生产者生产了之后消费者才消费,消费者消费之后,通知生...

  • java多线程

    生产者与消费者问题

  • 生产者/消费者问题

    生产者消费者问题 背景 在并发编程中,生产者消费者问题(producer/consumer)是一个经典的老生常谈的...

  • 第2章 2-4经典同步问题

    1.生产者—消费者问题 The proceducer – consumer problem:多个生产者和消费者对n...

网友评论

      本文标题:取放水果问题(生产者-消费者问题的变形)

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