1)为什么需要在单个原子操作中进行多个增减操作?您能举个例子来解释一下吗?
2)为什么semop允许将值更改为小于-1和大于+1的值?这样做有任何实际用途或示例吗?
(我知道,在System V信号量的semop()函数中,我可以使信号量数组中的一个或多个信号量按指定值增加或减少,而在POSIX信号量的sem_wait()或sem_post()中则不能这样做。但是这样做有什么用途?)
我阅读的文章如下:
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
作者编写了一个多个信号量原子增减操作的代码,在标题“实现一组信号量”下。然而,其实际使用仍未在此处提及。
3) 此链接提供的是有关System V信号量多路复用的书籍内容。
一本书的摘录:“在UNIX System V中,信号量机制进行了一些调整。操作原子性得以保留。但是,操作添加或减去的值可以大于1(为什么?有何用途?)。而且,进程可以同时执行多个信号量操作,以避免当多个进程同时竞争多个不同资源时出现死锁问题(如何实现?例如?)。”
希望这样更清楚了解问题。
如果您对所提出的问题有任何疑问,请发表评论。
提前致谢!