2012-01-31 209 views

回答

1

共享內存,顧名思義,是一個被動對象內存。您需要使用互斥鎖來跟蹤其他應用程序的活動。每個應用程序創建自己的互斥鎖並等待另一個進程的互斥鎖。如果應用程序終止,互斥狀態將變爲放棄。

+0

非常感謝Eugene Mayevski的EldoS。 http://www.kernel.org/doc/man-pages/online/pages/man7/signal.7.html以供參考:SIGCHLD 20,17,18 Ign孩子停止或終止 – 2012-02-08 19:44:39

+0

@ mav_2k如果你在談論linux或Unix,你可能需要通過爲你的問題設置適當的標籤來反映這一點。 – 2012-02-09 06:05:55

1

一種方法是讓父母/控制進程將所有其他進程作爲子進程啓動。當任何孩子死亡時,父母將收到SIGCHLD,並且可以以理智的方式處理共享內存/資源的清理。

PostgreSQL遵循此設計模式與其postmaster和工作進程。

請注意,在大多數Unix系統中,進程死亡期間操作系統不會更改/解鎖互斥鎖。信號量提供UNDO功能,但它們肯定比互斥體重得多。因人而異。

+0

非常感謝CoreyStup。 http://www.kernel.org/doc/man-pages/online/pages/man7/signal.7.html以供參考:SIGCHLD 20,17,18 Ign孩子停止或終止 – 2012-02-08 19:47:24