共享内存锁定和进程崩溃

3
我希望能更好地了解共享内存同步的问题。我已经理解到,不同操作系统上进程间同步的工作方式可能会有所不同。最大的区别在于当锁定共享内存的进程崩溃时会发生什么情况。Windows 在进程崩溃后会释放已锁定的命名互斥体,而 Linux 则不会释放它。有人能更好地解释这个问题以及其中的优点和缺点吗?在 Linux 下如何释放一个命名互斥体或进程间信号量?我在网上搜索过,但没有找到解释问题和解决方案的人。
我希望有人能帮助我。对我的英语表示抱歉。
1个回答

2
Windows的优点在于等待线程被释放以继续执行。缺点是它不知道共享内存的状态 - 崩溃的进程可能已经完成了一部分更新。(Windows通过在互斥锁上等待返回WAIT_ABANDONED而不是WAIT_OBJECT_0(或者如果在多个对象上等待,则返回相应的偏移量)来指示这一点。)
实际上,唯一安全的做法是以某种方式重置共享内存(假设可以有意义地完成),或者失败。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接