我在讀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的設定」。相同的實際用法在這裏也沒有提到。
從書的摘錄:
「以UNIX系統V,該信號量機制使得一些調整操作原子被保留但是操作的相加或相減的值可以是。 (爲什麼?有什麼用?)甚至更多的進程可以同時執行多個信號量操作,以避免多個進程同時競爭多個不同資源時出現死鎖問題。(如何?實例?)」
我希望,使問題更加清晰。
請評論,如果你有問的問題有任何懷疑。提前
謝謝!
嗨,Rein,感謝您的回覆,但我仍然存在以下疑問: – Sahil 2014-10-13 06:26:27
1)如果會話終止,是不是應該增加信號量? (最有可能是一個錯字,但只是想指出。) 2)我從你的解釋中瞭解到,多次遞增/遞減的原子性可以防止死鎖情況。但是不能通過連續進行2次semop操作來避免這種情況? (按照相同的順序 - 首先遞減音頻,然後遞減每個會話中的視頻。) – Sahil 2014-10-13 06:31:57
3)我真的不明白我們如何能夠使用信號量來實現負載平衡。根據我的理解,信號量與任何資源都沒有關係。請儘可能澄清並提供程序化證明。謝謝 :) – Sahil 2014-10-13 06:35:32