我正在阅读 POSIX 和 System V 信号量之间的区别,并且我阅读了一些相同的文章。在每篇文章中都写着这样的声明:“如果您需要在一个步骤中实现具有多个增量 - 减量的原子操作,那么 System V 信号量是有益的。”
我的问题是:
1)在单个原子操作中需要多次递增/递减吗?你能举个例子解释一下吗?
2)为什么semop允许将值更改为小于-1且大于+1的值?是否有任何实际用法/示例?
(我知道使用 System V 信号量中的 semop() 函数,我可以使信号量增加或减少一个指定值,而不是信号量数组中的一个信号量,并且不能使用 sem_wait() 或 sem_post() POSIX 信号量。但是相同的有什么用?)
我看过的文章,供大家参考:
1) http://www.ibm.com/developerworks/library/l-semaphore/
3) http://www.linuxdevcenter.com/pub/a/linux/2007/05/24/semaphores-in-linux.html?page=4
4) http://linuxtips.pbworks.com/w/page/29023300/SystemV%20vs%20Posix%20IPC
更新:
我已经阅读了以下文章,其中提到了使用 semop() 对信号量进行多次递增/递减,但我仍然无法获得相同的示例/实际用法。供您参考的文章:
1) http://kaharris.org/teaching/51081/Assignments/Final/systemV.pdf
文章摘录:(标题为“多信号量操作示例”下)
“System V 信号量的强大之处在于,它们可用于在一次操作中自动检查和设置多个信号量。”
他也给出了如何做到这一点的一小部分。但没有实际用法。
2) http://www.anirudhtom.com/2011/02/system-v-semaphores-for-babies.html
作者在题为“IMPLEMENTING A SET OF SEMAPHORE”下编写了一个原子操作中信号量的多次递增/递减的代码。这里也没有提到它的实际用法。
书中的一段摘录:
“在 UNIX System V 中,信号量机制做了一些调整,保留了操作的原子性。但是操作的加减值可以大于一。(为什么?有什么用?)。而且,进程可以做多个信号量当多个进程同时竞争多个不同的资源时,同时操作以避免死锁问题。(如何?示例?)“
我希望这能让问题更清楚。
如果您对所提出的问题有任何疑问,请发表评论。
提前致谢!