假设有一座独木桥,同一方向的行人可以连续过桥,而当某一方向有人过桥时,另一方向的行人必须等待;直到某一方向无人过桥时,另一方向的行人才可以过桥。用信号量解决该同步互斥问题,其中初始条件设置和其中一方行人的进程代码如下,补全代码中的空白。(每空计1分)
int ACounter = 0;
int BCounter = 0; //ACounter和BCounter分别表示从A、B两方向过桥的人数
semaphore bridge = (空白1); //实现对桥的互斥共享
semaphoreAMutex = BMutex = (空白2); //对Acounter和BCounter的互斥共享
PA(){
wait(AMutex);
if (ACounter == (空白3)) wait ((空白4));
(空白5);
signal((空白6));
使用浴室;
wait(AMutex);
ACounter--;
if(ACounter == 0)signal(bridge);
signal((空白7));
}
//PB()进程与PA()进程类似,只需将“A”与“B”互换
计算机操作系统问题,各位
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- 「已注销」 2023-03-31 16:23关注
我引用ChatGPT作答:
int ACounter = 0; int BCounter = 0; //ACounter和BCounter分别表示从A、B两方向过桥的人数 semaphore bridge = (1); //实现对桥的互斥共享 semaphore AMutex = 1, BMutex = 1; //对ACounter和BCounter的互斥共享 PA(){ wait(AMutex); if (ACounter == 0) wait(bridge); ACounter++; signal(AMutex); 使用浴室; wait(AMutex); ACounter--; if (ACounter == 0) signal(bridge); signal(AMutex); } //PB()进程与PA()进程类似,只需将“A”与“B”互换 PB(){ wait(BMutex); if (BCounter == 0) wait(bridge); BCounter++; signal(BMutex); 使用浴室; wait(BMutex); BCounter--; if (BCounter == 0) signal(bridge); signal(BMutex); }初始条件:ACounter = 0, BCounter = 0,bridge信号量初值为1,AMutex和BMutex信号量初值为1。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报