可以在Linux上实现正确的故障安全过程共享屏障吗?

可以在Linux上实现正确的故障安全过程共享屏障吗?,第1张

可以在Linux上实现正确的故障安全过程共享屏障吗?

与bdonlan在SO聊天上进行了长时间的讨论之后,我想我有一个解决方案。基本上,我们将问题分为两个自同步释放问题:销毁 *** 作和取消映射。

处理破坏很容易:只需使

pthread_barrier_destroy
函数等待所有服务员停止检查障碍即可。这可以通过在屏障中使用计数,在进入/退出等待函数时原子递增/递减以及使destroy函数旋转以使计数达到零来完成。(如果您在使用计数的高位或类似位置贴上一个服务员标志,则也可以在此处使用futex,而不仅仅是旋转)。

处理取消映射也很容易,但也可以是非本地的:通过在syscall包装器中添加锁定,确保在屏障侍者退出过程中不会出现

munmap
mmap
带有
MAP_FIXED
标志。这需要一种特殊的读写器锁。最后一个到达障碍的服务员应抓住
munmap
rw锁上的读锁,当最后一个服务员退出时(当减少用户计数时,计数为0时),该锁将被释放。
munmap
并且
mmap
可以通过使Writer锁递归来使其成为可重入的(如某些程序可能期望的那样,即使POSIX不需要它)。实际上,一种读写器是完全对称的,并且每种类型的锁都排除相反类型的锁,但不是同一类型的锁应该是最好的。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5038609.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存