2012-01-31 174 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