在2010年关于Automatically release mutex on crashes in Unix问题的评论中,jilles声称:
glibc强大的互斥量之所以如此之快,是因为glibc采用了危险的捷径。当内核将互斥锁标记为“将导致EOWNERDEAD”时,不能保证互斥锁仍然存在。如果互斥锁被销毁,内存被替换为内存映射文件,该文件恰好在正确的位置包含最后一个拥有线程的ID,并且最后一个拥有线程在写入锁字之后(但在从拥有互斥锁的列表中完全删除互斥锁之前)终止,则该文件将被损坏。Solaris和will-be-FreeBSD9健壮的互斥锁速度较慢,因为它们不想冒这个风险。
我不能理解这种说法,因为销毁互斥是不合法的,除非它是解锁的(因此不在任何线程的健壮列表中)。我也找不到任何搜索这样的bug/问题的参考资料。这种说法仅仅是错误的吗?
我这么问的原因和我感兴趣的原因是,这与我自己的实现的正确性有关,这些实现是基于相同的Linux robust-mutex原语构建的。
https://stackoverflow.com/questions/11945429
复制相似问题