1、互斥的概念
互斥:当一个进程在临界区访问共享资源时,其他进程不能进入该临界区访问任何共享资源。
用硬件实现进程互斥时,中断禁用适于单 CPU 系统,多 CPU 系统可使用专用机器指令。
2、临界资源与临界区
临界区:一段代码,在这段代码中进程将访问共享资源,当一个进程已经在这段代码中运行时,另外一个进程就不能在这段代码中执行。
临界资源:一次仅允许一个进程使用的共享资源。
3、信号量含义,semWait,semSignal含义(重点)
信号量含义:
信号量s的值表示可用资源个数。
s=1时:有一个临界资源可用,一个进程可进入临界区。
s=0时:临界资源已分配,一个进程已进入临界区。
s<0时:临界区已被占用,|s|是该资源的等待队列长度(阻塞进程个数)
S.count >= 0:可以执行semWait(s)而不被阻塞的进程数。
S.count < 0: 阻塞在s.queue中的进程数。
semSignal(s)(P(s)):本进程释放一个资源。
semWait(s)(V(s)):本进程请求一个资源。
==多个semWait()的次序不能颠倒,否则可能导致死锁。==多个semSignal()操作的次序可任意。
semWait(s)、semSignal(s)操作必须成对出现。
4、信号量原语定义
5、用信号量实现互斥与同步
6、有限缓冲的生产者/消费者问题
缓冲池一次只能让一个进程访问。设一信号量s,初值为1.
生产者需要空缓冲来发送数据,设一信号量empty,初值为k。
消费者需要满缓冲来获取数据。设一信号量full,初值为0.
7、进程间通过“消息传递”交换信息:无阻塞send和阻塞receive。
无阻塞send和阻塞receive:接收者阻塞,直到请求的信息到达。