加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

信号量没有破坏/解除竞争条件

发布时间:2021-01-14 13:33:34 所属栏目:Linux 来源:网络整理
导读:副标题#e# 注意:在公开集思广益之后,我已经大量编辑了这个问题.然而,所描述的实际算法以及关于它们是否足以避免比赛的问题应该是相同的. 我正在尝试实现信号量,避免glibc错误号12674中描述的竞争条件: http://sourceware.org/bugzilla/show_bug.cgi?id=12

这里的一个选择是修改内核以允许用于读取服务器字段的低开销,安全的方法,而不会在释放存储器的情况下导致段错误.例如,您可以添加一个注册特定于线程的数据结构的系统调用;在该特定于线程的数据页面中,您可以拥有“错误处理程序跳转地址”.如果程序段错误,如果跳转地址非零,内核只是跳转到那里而不是提升SIGSEGV.或者,您可以使用类似的机制来简单地抑制违规指令.

现在你所要做的就是:

>在libc init和线程启动时,注册这些特定于线程的结构,并在TLS数据中保存指向它们的指针
>在帖子中,安排在服务员数量周围抑制故障.如果确实发生了故障,请不要进行唤醒(如果有问题的内存被重用于其他用途,则唤醒无害)

你去了 – 你得到了快速的算法,但你也得到了保护,以防止删除比赛.但你必须破解内核的segv处理程序才能做到这一点.可能值得在Windows上查看SEH;类似的机制在这里可以很好地运作.

在任何演员阵容中,我认为你的方法并没有出现任何问题,但我可能会遗漏一些东西.在适当的邮件列表上提出它并与futex维护者协商可能会很好;他们可能会对在内核中实现支持感兴趣,以使您更容易.

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读