首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >易失性sig_atomic_t的内存安全

易失性sig_atomic_t的内存安全
EN

Stack Overflow用户
提问于 2018-10-04 15:31:57
回答 1查看 211关注 0票数 2

volatile sig_atomic_t是在信号处理程序和主应用程序之间共享数据的一种保证安全的方式。当在具有更宽松的内存模型的现代CPU上运行时,Posix提供了什么内存排序保证。具体地说,在使用volatile sig_atomic_t读取或写入数据时,是否应该使用内存屏障/内存栅栏

编辑:只是为了澄清一下。我的问题是,当使用sig_atomic_t时,我们如何保证不会在宽松的内存排序方面发生不好的事情,特别是在现代的高度缓存、多核等架构中。

EN

回答 1

Stack Overflow用户

发布于 2018-10-04 16:43:03

POSIX目前没有任何内存排序保证,因为它还没有集成到C++ (C11)内存模型中。

C11确保volatile sig_atomic_t类型的对象在信号处理程序之间保留它们的值,即使没有屏障也是如此。其他对象如果被访问,则具有不确定的值。atomic_signal_fence命名错误,因为正如标准中指定的那样,它不能用于访问其他类型(除了volatile sig_atomic_t之外)的对象,从而使它们在信号处理程序中保留它们的值。

对于异步信号,可以通过在专用线程中处理它们并为所有其他线程阻塞它们来避免这些问题。对于大多数同步信号(例如由整数除以零触发的SIGFPE,或者用于访问未映射内存的SIGBUSSIGSEGV ),我认为没有任何标准指定会发生什么。这真的很奇怪,因为异步信号应该更难处理,但目前情况正好相反。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52641332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档