2010-04-29 130 views
1

這是從高級編程Liniux的提取物:共享內存和處理Sempahores(IPC)


信號量繼續使用它們已經終止的所有過程後,即使存在。 使用信號量集合的最後一個過程必須明確地將其刪除,以確保操作系統沒有用完信號量。爲此,請調用帶有 信號量標識符的semctl,集合中信號量的數量,IPC_RMID作爲第三個參數 和任何聯合semun值作爲第四個參數(忽略)。調用進程的有效用戶ID必須與信號量的分配器 (或者調用者必須是root)相匹配。與共享內存段不同,刪除信號集 集會導致Linux立即釋放。


如果一個進程分配共享內存,許多過程中使用它,從來沒有將其刪除(帶了shmctl),如果他們全部結束,然後共享網頁繼續可用。 (我們可以看到這與ipcs)。

如果某個進程執行了shmctl,那麼當最後一個進程解除關聯時,系統將釋放共享內存。

到目前爲止這麼好(我想,如果不是,請糾正我)。

我不知道從那個報價我不明白,首先它說: 「即使在使用它們的所有進程已終止後,信號量仍然存在。」 然後: 「與共享內存段不同,刪除信號集會導致Linux立即釋放。」

回答

2

兩種說法並不矛盾,互相...

第一個聲明說,信號量將繼續,除非存在/直到某些程序明確地將其刪除(即它不會被自動刪除時最後一個程序停止使用它)。

第二個聲明說,當一個程序刪除一套信號燈,Linux將解除分配信號立即設置(而不是,比方說,等待所有其他程序停止使用第一)

+0

大。我現在知道了。 謝謝。 – fsdfa 2010-04-30 00:34:36