2014-09-26 18 views
5

我在读POSIX和System V信号量之间的差异,我读了一些相同的文章。在每篇文章中,该陈述都写为: “如果您需要以多个增量实现原子操作 - 在一个步骤中递减,则系统V信号是有益的。”系统V信号量多次递增/递减

我的问题是:

1)什么是在单个原子操作需要多个递增/递减?你能用一个例子来解释吗?

2)为什么semop允许将值更改为小于-1且大于+1的值?有没有实际的用法/相同的例子?我知道用系统V信号量中的semop()函数可以使信号量增加或减少信号量数组&中的一个信号量的指定值,这些信号量不能用sem_wait()或。sem_post POSIX信号灯的(),但有什么用相同的)

我读的文章,供大家参考:

1)http://www.ibm.com/developerworks/library/l-semaphore/

2)Differences between System V and Posix semaphores

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

UPDATE:

我已经阅读了下面的文章,其对利用执行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

作者已经写为信号量的多个递增/递减一个代码在一个原子操作的标题下的“实施SEMAPHORE的设定”。相同的实际用法在这里也没有提到。

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=system%20v%20semaphore%20multiple&f=false

从书的摘录:

“以UNIX系统V,该信号量机制使得一些调整操作原子被保留但是操作的相加或相减的值可以是。 (为什么?有什么用?)甚至更多的进程可以同时执行多个信号量操作,以避免多个进程同时竞争多个不同资源时出现死锁问题。(如何?实例?)”

我希望,使问题更加清晰。

请评论,如果你有问的问题有任何怀疑。提前

谢谢!

回答

0

例子多重递增/递减可能会很方便:想象某种类型的会议系统,视频会话需要一个视频通道,另一个需要声音,但其他会话只使用音频通道。要控制对通道的访问,可以使用信号量。当一个会话终止时,它应该立刻减少它使用的所有信号量,以释放它们以用于其他事务呃会议。如果这不是原子的话,视频会议会话可能会在开始时抓住音频通道,但已经太晚而无法获取视频通道。

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

希望这可以让它更清晰一些。

+0

嗨,Rein,感谢您的回复,但我仍然存在以下疑问: – Sahil 2014-10-13 06:26:27

+0

1)如果会话终止,是不是应该增加信号量? (最有可能是一个错字,但只是想指出。) 2)我从你的解释中了解到,多次递增/递减的原子性可以防止死锁情况。但是不能通过连续进行2次semop操作来避免这种情况? (按照相同的顺序 - 首先递减音频,然后递减每个会话中的视频。) – Sahil 2014-10-13 06:31:57

+0

3)我真的不明白我们如何能够使用信号量来实现负载平衡。根据我的理解,信号量与任何资源都没有关系。请尽可能澄清并提供程序化证明。谢谢 :) – Sahil 2014-10-13 06:35:32