一道关于信号量的题目
答案:
----------------------------------------------------------
a. P(S1)
b. V(S2) V(S3)
c.P(S2)
d.V(S4)
e.P(S4)
f.V(S5)
----------------------------------------------------------
信号量问题还可以理解, 但是理解不了这道题. 好好地对了对答案, 发现个问题, 题目里没有说S1是P1的信号量, S2是P2的信号量.
题目用了大量的P1,S1, a,b,c,d , 选项又是ABCD,
所以题目就是为了让大家出错.
如果程序写成这样, 会被打S.
一旦发现了S1和P1的关系, 不在数字1上这个关键点, 就好办了. 建议做题的时候, 使用进程1, 进程2来代替P1,P2... 这道题答不对, 我觉得就是乱在文字上.
进程1 结束, 要发信号给 进程2. 题目里用了 V(S1), 也就是信号1的V操作.
那么进程2执行之前, 应该收到信号, 去做-1操作,及P操作. 那么就是P(S1). 信号量就是进程1结束时的信号量.
进程2结束之后, 要给进程3和进程4发型号, 那么用两个变量S2,S3, 做+1 V操作. 通知进程3和进程4,
到底是进程3使用S2, 还是S3, 还是进程4使用S3,S2, 看下文, 进程4执行的时候,做了S3的减操作,意思是进程4收到了S3, 而S3是进程2结束后发出的, 所以进程2-->进程4 这条线用了S3
所以进程2->进程3 使用了S2. 所以
到了进程3开始, 就要做S2的减操作, 就是P(S2).
进程3结束, 应该给进程4再发一个信号, 那么排下来, 就是S4咯. 所以d就是 V(S4).
进程4执行有两个信号, P(S3)给了, 刚才进程3结束又来了一个S4, 那么 e 填P(S4)
进程4结束后, 通知进程5, 再给一个变量S5, 通知一下, 就是V(S5).
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现