c - 为什么我的将 __sig_atomic_t 定义为 int 而不是 volatile int
问题描述
我正在阅读“计算机系统:程序员的视角”,在第 8 章中,它说 sig_atomic 可以用作可以在信号处理程序中使用的标志的类型。但是当我跟踪我的头文件时,它被定义为没有volatile的int,是不是意味着当main修改标志时,它可能使用'write back'而不是'write through',这可能是不正确的?
解决方案
因为sig_atomic_t
在实践中应该总是被限定volatile
(至少对于在信号处理程序中设置的变量)。它(正式)与 C11原子类型无关(即使名称可能令人困惑)。但sig_atomic_t
实际上应该是某种可以在单个机器代码指令中写入或从内存中读取的整数类型(并且您需要对其进行限定volatile
以使其根据需要发生,并指示编译器不要将其缓存在某个寄存器等中...)。
对于 Linux,另请参见signal(7)和最重要的 signal-safety(7)。
请注意,C11 标准并没有提供很多关于信号的信息(通过阅读n1570进行检查,尤其是 §7.14)。实际上,您可能需要为它们提供一些操作系统支持。另请参见 POSIX信号概念。
另请阅读操作系统:三个简单的部分
推荐阅读
- r - 尝试在 R Shiny 应用程序中的单行上显示多个输入
- reactjs - 如何使用功能组件中的反应挂钩替换组件是否更新?
- react-native - React Native,如何立即更新异步存储?
- binding - SwiftUI & UITextField ViewModel 绑定问题
- android - 安卓底片设计
- c++ - 如何使用 QPushButton 在现有 QTabWidget 上添加“新选项卡”
- python - 具有二维样条函数的python中的混合模型方差分析和线性回归
- ios - 使用 URLSession 为 SwiftUI 视图加载 JSON 数据
- windows - 如何在上下文菜单中添加“运行 lua 脚本”选项
- google-cloud-dataflow - 轮询结果文件超时:启动 Google Dataflow SQL 查询时出错