【信号量操作】
P操作:申请资源,S=S-1,若是S>=0,则执行P操作的进程继续执行;若S<0,则置该进程为阻塞状态(因为无可用资源),并将其插入阻塞队列。
V操作:释放资源,S=S+1,若是S>=0,则执行V操作的进程继续执行;若S<=0,则从阻塞状态唤醒一个进程,并将其插入就绪队列,然后执行V操作的进程继续。
例:
生产者和消费者的问题中,生产者生产一个商品S,而后要申请互斥的使用该仓库,即首先需要执行互斥信号量P(S0),申请到仓库独立使用权后,再判断仓库是否有空闲(信号量S1),执行P(S1),若结果大于等于0,表示仓库有空闲,再将S放入仓库中,此时仓库商品数量(信号量S2)增加1,即执行V(S2)操作,使用完毕后,释放互斥信号量V(S0)。
对于消费者,首先也需要执行互斥信号量P(S0),申请到仓库独立使用权后,再判断仓库中是否有商品,执行P(S2),若结果大于等于0,表示有商品,可以取出,此时造成了一个结果,即仓库空闲了一个,执行V(S1)操作,使用完毕后,释放互斥信号量V(S0)。
【信号量操作】
最新推荐文章于 2023-06-08 22:59:53 发布