题19
题目
【2013 统考真题】某博物馆最多可以容纳
cobegin
参观者进程i:
{
...
进门;
...
参观;
...
出门;
...
}
coend请添加必要的信号量和 P、V(或 wait()、signal())操作,以实现上述过程中的互斥与同步。要求写出完整的过程,说明信号量的含义并赋初值。
分析
注意下面这个empty资源只有一个对象在使用,只需要定义empty,而不是empty = 500和full=0。但是我感觉定义了应该也不错?

解
出入口一次仅允许一人通过, 设置互斥信号量 mutex, 初值为 1 。博物馆最多可以同时容纳 500 人, 因此设置信号量 empty, 初值为 500 。
semaphore empty = 500; // 博物馆可以容纳的最多人数
semaphore mutex = 1; // 用于出入口资源的控制
cobegin
参观者进程 i: {
// ...
P(empty); // 可容纳人数减 1
P(mutex); // 互斥使用门
进门;
V(mutex);
参观;
P(mutex); // 互斥使用门
出门;
V(mutex);
V(empty); // ⚠️ 可容纳人数增 1
}