sig_atomic_t 实际上是如何工作的?

2024-01-06

编译器或操作系统如何区分 sig_atomic_t 类型和普通 int 类型变量,并确保操作是原子的?使用两者的程序具有相同的汇编代码。如何额外注意使操作原子化?


sig_atomic_t不是原子数据类型。它只是允许您在信号处理程序上下文中使用的数据类型,仅此而已。因此,最好将其名称理解为“相对于信号处理的原子”。

为了保证与信号处理程序之间的通信,只需要原子数据类型的一个属性,即读取和更新将始终看到一致的值。其他数据类型(例如可能long long) 可以用多个汇编指令来编写低位和高位部分,例如sig_atomic_t保证一次性读取和写入。

因此平台可以选择任何整数基类型作为sig_atomic_t为此它可以保证volatile sig_atomic_t可以安全地在信号处理程序中使用。众多平台选择int为此,因为他们知道对他们来说int是用一条指令编写的。

最新的 C 标准 C11 具有原子类型,但它们是完全不同的东西。其中一些(那些“无锁”的)也可以在信号处理程序中使用,但这又是一个完全不同的故事。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sig_atomic_t 实际上是如何工作的? 的相关文章

随机推荐