semaphore 中s是否能为负值
在wiki上面看到的几篇文章都明确说
s不能为负值, 因为s表示某种资源可用的数量, 最小为0
http://en.wikipedia.org/wiki/Monitor_(synchronization) 中介绍使用monitor实现semaphore时
However, the integer must never be decremented below 0; thus a thread that tries to decrement must wait until the integer is positive.
http://en.wikipedia.org/wiki/Semaphore_(programming)
中定义p操作时
- function V(semaphore S):
- Atomically increment S
- [S ← S + 1]
- function P(semaphore S):
- repeat:
- Between repetitions of the loop other processes may operate on the semaphore
- [if S > 0:
- Atomically decrement S - note that S cannot become negative
- S ← S - 1
- break
复制代码但课本上面还有网上查的中文资料里面都是 s可以为负值
P操作的定义是先s-- 然后测试s是否大于等于0
按照semaphore的定义(按照wiki上的) s小于0是没有意义的
但课本上用s为负值表示等待此资源的进程数目 (看起来也是很有意义的)
想请教下各位 现实中(一般操作系统提供的PV) 中 s是否可以为负.
(完全用linux都快4年了,但都还没接触过内核,上课之后才知道signal和wait竟然就是PV... 惭愧中)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
signal应该不是pv吧。。。
但课本上用s为负值表示等待此资源的进程数目 (看起来也是很有意义的)
好像LINUX就是这么实现的。。。
本帖最后由 SNYH 于 2011-06-12 20:06 编辑
看了下 man 3 sem_getvalue中的一句
看来两种方式都是存在的. 不过linux adopts the former behavior. 这句看来
linux是选择wiki上面的方式吧?
不纠结这个问题了,
wiki上面解释的意义和实际实现方式属于不同层面上的事物, semaphore意义应该就是wiki上写的, wiki上面的那个PV具体操作属于实现的其中一种.
课本上的属于另外一种实现,或者semaphore的变种.
(自我安慰中)
关于signal, 表示很羞愧.