使用信号量机制实现进程同步互斥问题需要代码在不同地方做很多控制,大量分散的同步操作给系统管理带来了麻烦,且容易因同步操作不当而导致系统死锁,而管程把控制的代码独立出来,不仅不容易出错,也使得客户端代码调用更容易。
为了解决临界区分散所带来的管理和控制问题,管程引入便于系统管理共享资源,并保持互斥。
管程引入了 条件变量 以及相关的操作:wait() 和 signal() 来实现同步操作。对条件变量执行 wait() 操作会导致调用进程阻塞,把管程让出来给另一个进程持有。signal() 操作用于唤醒被阻塞的进程。
每个条件变量保存了一个等待队列,记录因该条件变量而阻塞的所有进程。
一个进程被阻塞的原因(条件变量)可以有多个。
管程中的signal操作是针对某个条件变量的,若不存在因该条件而阻塞的进程,则signal不会有任何影响。