线程/进程同步操作的监视器:管程

管程作为监视器,解决进程线程同步问题,提供wait和signal操作,确保互斥访问。条件变量在管程内全局,仅通过wait()、signal()操作。在生产者消费者问题中,管程机制实现同步互斥,确保缓冲区满或空时正确执行操作。
摘要由CSDN通过智能技术生成

我们通过信号量解决同步问题,而信号量存在程序编写困难或效率低下的问题。于是发明了管程,将信号量的这些组织工作交给一个专门的构造来管。管程(monitor)意为监视器,它监视的是进程或线程的同步操作。

管程就是一组子程序,变量和数据的组合,即你把需要同步的代码用一个管程的构造框起来。

注意:进程只能互斥的使用管程,即当一个进程使用管程时,另一个进程必须等待。当一个进程使用完管程后,它必须释放管程并唤醒等待管程的某一个进程。

管程的条件变量(c):

条件变量c实际是一个指针,它指向一个等待该条件的PCB队列。它只有在管程内才能被访问,它对管程内所有过程是全局的,只能通过wait(),signal()两个操作来访问。

如:notfull表示缓冲区不满,如果缓冲区满,那么将要在缓冲区写入数据的进程就要等待notfull,即wait(notfull);相应地,如果一个进程在缓冲区内读数据,当它读完一个数据后,要执行signal(notempty),表示已经释放了一个缓冲区单元。

wait(c):

挂起调用进程并释放管程,直至另一进程在条件变量上执行signal()。

wait(c)表示为进入管程的线程分配某种类型的资源,如果此时这种资源可用,那么进程使用,否则进程被阻塞,进入队列。

signal(c):

如果有其他进程因对条件变量执行wait()而被挂起,便释放之,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值