《计算机操作系统》——经典进程同步问题

目录

    • 生产者-消费者问题
    • 多生产者-消费者问题
    • 吸烟者问题
    • 读者-写者问题
    • 哲学家进餐问题

生产者-消费者问题

《计算机操作系统》——经典进程同步问题_第1张图片
《计算机操作系统》——经典进程同步问题_第2张图片

  • 每个程序中用于实现互斥的wait(mutex)和signal(mutex)必须成对出现。
  • 对资源信号量empty和full的wait和signal操作,同样需要成对出现,但分别处于不同的程序中。
  • 在每个程序的多个wait操作顺序不能颠倒。应该先执行对资源信号量的wait操作,然后再执行对互斥信号量的wait操作,否则可能引起进程死锁。(我理解就是先拿到了临界区权限却因为empty或full无法访问临界区,使本进程阻塞,而另一个进程又因为没有访问权限而阻塞)

多生产者-消费者问题

  桌上有一个盘子,每次只能放一个水果,爸爸专门放苹果,女儿只吃苹果,妈妈专门放橘子,儿子只吃橘子。
《计算机操作系统》——经典进程同步问题_第3张图片

  • 若盘子容量只有1,可以不设置专门的互斥变量mutex:
    《计算机操作系统》——经典进程同步问题_第4张图片
  • 但若盘子容量>1,不设置互斥变量mutex,可能会导致多生产者同时访问临界区造成数据覆盖。

吸烟者问题

《计算机操作系统》——经典进程同步问题_第5张图片
《计算机操作系统》——经典进程同步问题_第6张图片

  • 吸烟者问题能为“可以生产多个产品的单生产者”问题提供思路
  • “轮流让各个吸烟者吸烟”这里使用一个整形变量i实现
  • 若一个生产者要生产多种产品(会引发多种前驱事件),那么各个V操作应该放在各自对应的“事件”发生之后的位置。

读者-写者问题

  有读者和写者两组并发进程,共享一个文件,当两个或两个以上的读进程同时访问共享数据时不会产生副作用,但若某个写进程和其他进程(读进程或写进程)同时访问共享数据时可能导致数据不一致的错误。

  • 问题一:
    ①允许多个读者可以同时对文件执行读操作
    ②只允许一个写者往文件中写信息
    ③任一写者在完成写操作之前不允许其他读者或者写者工作
    《计算机操作系统》——经典进程同步问题_第7张图片
  • 问题二:
    ①允许多个读者可以同时对文件执行读操作
    ②只允许一个写者往文件中写信息
    ③任一写者在完成写操作之前不允许其他读者或者写者工作
    ④写者执行写操作前,应让已有的读者和写者全部退出
    《计算机操作系统》——经典进程同步问题_第8张图片

哲学家进餐问题

  一张圆桌上坐着5名哲学家,每两个哲学家之间的桌上摆一根筷子,哲学饥饿时,试图拿起左、右两根筷子(一根一根拿)。如果筷子已经在他人手上,就需要等待,拿到两根才能进餐。(同时使用多个临界资源的问题)
《计算机操作系统》——经典进程同步问题_第9张图片
错误例子
可能会出现每位哲学家都拿一根筷子,导致死锁的问题。
《计算机操作系统》——经典进程同步问题_第10张图片
解决方案

  • 最多允许4个哲学家同时去拿左边的筷子,最终能保证至少有一位哲学家能够进餐,并在使用完毕后能释放他用过的两只筷子,使更多哲学家能够进餐
  • 规定奇数号哲学家先拿左边筷子,然后再拿右边;而偶数号哲学家则相反。最终总会有一位哲学家能获得两只筷子进餐
  • 仅当哲学家的左右两只筷子都可以使用时,才允许他拿起筷子进餐
  • 各个哲学家拿筷子必须互斥执行
    《计算机操作系统》——经典进程同步问题_第11张图片

你可能感兴趣的:(操作系统,操作系统)