gpt4 book ai didi

c++ - volatile sig_atomic_t 的内存安全

转载 作者:太空狗 更新时间:2023-10-29 12:39:28 26 4
gpt4 key购买 nike

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

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

最佳答案

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

C11 确保 volatile sig_atomic_t 类型的对象即使在没有栅栏的情况下也能在信号处理程序中保留它们的值。其他对象在访问时具有不确定的值。 atomic_signal_fence 被错误命名,因为按照标准中的规定,它不能用于访问其他类型的对象(volatile sig_atomic_t 除外)以保持其值的方式跨信号处理程序。

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

关于c++ - volatile sig_atomic_t 的内存安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52641332/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com