一、信号量的缺点
信号量的使用一定要小心,如下图中解决生产者-消费者问题的程序:
如果在producer的执行函数中,将empty与mutex的down操作互换,如果此时mutex为0,将首先对mutex进行down操作,进程陷入阻塞,而同时,当consumer的执行函数执行到down(&mutex)的时候,由于mutex为0,因此,consumer线程也将进入阻塞,两个进程都将永远进入阻塞状态,这被称为“死锁”
这说明使用信号量时一定要非常小心,一处很小的错误将有可能导致很大的麻烦,因为竞争条件、死锁以及其他一些问题都是不可预测和不可再现的行为
为了更易于编写正确的程序,一种高级同步原语 -- 管程(monitor)诞生了
二、管程
一个管程是一个由过程、变量及数据结构等组成的一个集合,它们组成一个特殊的模块或软件包。
管程内部的共享变量
管程内部的条件变量
管程内部并行执行的进程
对局部于管程内部的共享数据设置初始值的语句
进程可以在任何