信号量的类型
- 信号量分为:互斥信号量 和 资源信号量;
- 互斥信号量用于申请或释放资源的使用权,常初始化为1;
- 资源信号量用于申请或归还资源,可以初始化为大于1的正整数,表示系统中某类资源的可用个数;
- wait 操作用于申请资源(或使用权),进程执行wait原语时,可能会阻塞自己;
- signal 操作用于释放资源(或归还资源使用权),进程执行signal原语时,有责任唤醒一个阻塞进程;
信号量的意义
- 互斥信号量:申请/释放使用权,常初始化为1;
- 资源信号量:申请/归还资源,资源信号量可以初始化为一个正整数(表示系统中某类资源的可用个数,如可用打印机个数);
- s.count >= 0: 表示可执行wait(s)而不会阻塞的进程数(可用资源数);
- s.count < 0: 表示 s.queue 队列中阻塞进程的个数(被阻塞进程数);
s.count的取值范围
- 当仅有两个并发进程共享临界资源时,互斥信号量仅能取0,1,-1;
s.count == 1,表示无进程进入临界区;
s.count == 0, 表示已经有一个进程进入临界区;
s.count == -1,表示有一个进程正在等待进入临界区; - 当用s来实现n个进程的互斥时,s.count的取值范围为1 ~ -(n-1);
结尾
- 操作系统内核以系统调用形式提供wait和signal原语,应用程序通过该系统调用实现进程间的互斥;
- 工程实践证明,利用信号量方法实现进程互斥时高效的,一直被广泛采用;