操作系统进程同步三大问题:生产者消费者,哲学家进餐,读者写者问题

本文介绍了操作系统中进程同步的三个经典问题——生产者消费者问题、哲学家进餐问题和读者写者问题,详细讲解了如何使用信号量机制、互斥量和AND型信号量来解决这些问题。通过实例分析了死锁现象,并强调了同步操作的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于非科班出身的我,,,最近自学操作系统做了一些进程同步的笔记,写出来,希望能对大家有帮助,我是参照哈工大张英涛老师的视频和汤子瀛的书写的:

进程与进程之间的合作机制

信号量机制!!!

信号量是一种数据结构。

信号量的值与相应资源的使用情况有关。

信号量的值仅由原语P、V操作改变

 

(1)整型信号量

整型数  S <=0 代表资源被占用,不可用   S>0代表空闲可用

P操作(wait)原语

V操作(signal)原语

Wait(S)

  While S<=0 do no-op(无行为)

       S:=S-1;  //可用啦,那我就用咯

 

Signal(S)

  S:=S+1;

wait(S) 和signal(S)是原子操作。

缺点:只要信号量小于等于0,不满足让权等待。就是不会先让其进入阻塞,把CPU让给别人用。

 

(2)记录型信号量(目前应用较广)

记录型结构,包含两个数据项:

Type semaphore  = record

                Value:integer;

                L:lise of process;

                end

 

S.value为资源信号量初值,是某类资源的数目;

value大于0 的时候代表可用资源数目

value<0时候,绝对值代表等待使用资源的进程个数。也就是扔进阻塞队列。

wait操作申请某一个单位资源

Procedure wait(s)

Var S:semaphore;  

Begin

  S.value:=S.value-1;

  If S.value<0 then block(s,L);

End

 

signal操作:释放一个资源

Procedure signal(s)

Var S:semaphore;

Begin

  S.value = S.value+1;

  If S.value<=0 then

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值