补充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);
}
}
3. 管程
- 把对共享资源的操作进行封装

本文深入探讨了并发控制中的关键机制,包括PV操作(信号量)、生产者消费者问题的解决方案以及管程的概念。PV操作通过wait()和signal()函数实现资源的同步与互斥,生产者消费者模型利用信号量解决缓冲区满与空的问题,确保数据的一致性。管程则提供了一种更高级别的同步原语,将共享资源的操作封装,并通过条件变量控制进程的阻塞与唤醒。这些概念在多线程编程和分布式系统中具有重要应用。
最低0.47元/天 解锁文章
2538

被折叠的 条评论
为什么被折叠?



