我想尝试更好地理解共享内存的同步问题。我已经明白,进程间同步可以在不同的操作系统上有所不同。最大的区别是当锁定共享内存的进程崩溃时发生的情况。 Windows在进程崩溃后自由锁定名为mutex,而linux不释放它。有人可以更好地解释我的问题,哪些是优点和缺点?在进程崩溃后linux下如何可以释放命名的互斥锁或进程间信号量?我在互联网上搜索过但我没有找到能够解释问题和解决方案的人。
我希望有人可以帮助我。 抱歉我的英文。
答案 0 :(得分:1)
Windows的优势在于等待线程可以继续释放。缺点是它不知道共享内存的状态是什么 - 崩溃的进程可能是更新的一部分。 (Windows通过等待返回WAIT_ABANDONED
而不是WAIT_OBJECT_0
的互斥锁来表示这一点(如果等待多个对象,则表示这些互斥)。
在实践中,唯一安全的做法是以某种方式重置共享内存(假设可以有意义地完成)或失败。