System V信号量多次递增/递减

Sah*_*hil 5 c linux semaphore sysv-ipc

我正在阅读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/

2)System V和Posix信号量之间的差异

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

作者在原子操作中编写了一个代码,用于在"实现一组SEMHHORE"标题下多次递增/递减信号量.这里仍然没有提到它的实际用法.

3)http://books.google.co.in/books?id=-Mq5ve5KHXQC&pg=PA109&lpg=PA109&dq=system+v+semaphore+multiple&source=bl&ots=SsdKqyG-Kp&sig=Y7AGqHrsOWaOk8EvCX2dH2RqEnA&hl=en&sa=X&ei=RVomVK-pIIuEuwSV0ILwBQ&ved=0CDQQ6AEwBDgU #v = onepage&q =系统%20V%20semaphore%20multiple&F =假

摘录自本书:

"在UNIX System V中,信号量机制进行了一些调整.操作原子性被保留.但是操作的增加或减少值可能大于1.(为什么?有什么用?).甚至更多,进程可以做多个信号量当多个进程同时竞争许多不同的资源时,同时进行操作以避免死锁问题.(如何?示例?)"

我希望这会使问题更加明确.

如果您对所提出的问题有任何疑问,请发表评论.

提前致谢!

Rei*_*ein 0

多个增量/减量可能很方便的示例:想象一下某种会议系统,其中视频会话需要一个通道用于视频,另一个通道用于声音,但其他会话仅使用音频通道。为了控制对通道的访问,可以使用信号量。当会话终止时,它应该立即减少它使用的所有信号量,以将它们释放给其他会话。如果这不是原子的,则视频会议会话在开始时可能能够获取音频通道,但为时已晚,无法获取视频通道。

您的第二个问题与负载平衡有关。通过允许 [-1..1] 之外的其他值,您可以使用信号量值作为队列大小计量器。在上面的会议示例中,如果所有本地通道上的负载都非常重,也许您可​​以将会话重定向到另一个具有自己通道的不太繁忙的中继。

希望这能让它更清楚一些。