补充1-PV操作、管程、生产者消费者
1. PV操作
P操作
void wait(S) {
S.value--;
if (S.value < 0) {
进入资源S的等待队列 S.L;
自我阻塞 block(S.L);
}
}
V操作
void signal(S) {
S.value++;
if (s.value <= 0) {
从S.L中取出一个进程P;
唤醒进程P wakeup(P);
}
}
2. 生产者消费者
- 对缓冲区的访问 - 互斥
- 生产者/消费者关系 - 同步
S.mutex = 1; // 互斥信号量
S.empty = n; // 同步信号量
S.full = 0;
Producer {
while(1) {
生产数据;
P(empty);
P(mutex);
放数据;
V(mutex);
V(full);
}
}
Customer {
while (1) {
P(full);
P(mutex);
取数据;
V(mutex);
V(empty);
}
}