栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

处理破坏很容易:只需使

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

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

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/415405.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号