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

生产者-消费者问题

请添加图片描述
请添加图片描述

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

多生产者-消费者问题

  桌上有一个盘子,每次只能放一个水果,爸爸专门放苹果,女儿只吃苹果,妈妈专门放橘子,儿子只吃橘子。
请添加图片描述

  • 若盘子容量只有1,可以不设置专门的互斥变量mutex:
    请添加图片描述
  • 但若盘子容量>1,不设置互斥变量mutex,可能会导致多生产者同时访问临界区造成数据覆盖。

吸烟者问题

请添加图片描述
请添加图片描述

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

读者-写者问题

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

  • 问题一:
    ①允许多个读者可以同时对文件执行读操作
    ②只允许一个写者往文件中写信息
    ③任一写者在完成写操作之前不允许其他读者或者写者工作
    请添加图片描述
  • 问题二:
    ①允许多个读者可以同时对文件执行读操作
    ②只允许一个写者往文件中写信息
    ③任一写者在完成写操作之前不允许其他读者或者写者工作
    ④写者执行写操作前,应让已有的读者和写者全部退出
    请添加图片描述

哲学家进餐问题

  一张圆桌上坐着5名哲学家,每两个哲学家之间的桌上摆一根筷子,哲学饥饿时,试图拿起左、右两根筷子(一根一根拿)。如果筷子已经在他人手上,就需要等待,拿到两根才能进餐。(同时使用多个临界资源的问题)
请添加图片描述
错误例子
可能会出现每位哲学家都拿一根筷子,导致死锁的问题。
请添加图片描述
解决方案

  • 最多允许4个哲学家同时去拿左边的筷子,最终能保证至少有一位哲学家能够进餐,并在使用完毕后能释放他用过的两只筷子,使更多哲学家能够进餐
  • 规定奇数号哲学家先拿左边筷子,然后再拿右边;而偶数号哲学家则相反。最终总会有一位哲学家能获得两只筷子进餐
  • 仅当哲学家的左右两只筷子都可以使用时,才允许他拿起筷子进餐
  • 各个哲学家拿筷子必须互斥执行
    请添加图片描述
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值