假设有一座独木桥,同一方向的行人可以连续过桥,而当某一方向有人过桥时,另一方向的行人必须等待;直到某一方向无人过桥时,另一方向的行人才可以过桥。用信号量解决该同步互斥问题,其中初始条件设置和其中一方行人的进程代码如下,补全代码中的空白。(每空计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。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 微信会员卡等级和折扣规则
- ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
- ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
- ¥15 gdf格式的脑电数据如何处理matlab
- ¥20 重新写的代码替换了之后运行hbuliderx就这样了
- ¥100 监控抖音用户作品更新可以微信公众号提醒
- ¥15 UE5 如何可以不渲染HDRIBackdrop背景
- ¥70 2048小游戏毕设项目
- ¥20 mysql架构,按照姓名分表
- ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分