sig_atomic_t实际上如何工作?
编译器或OS如何区分sig_atomic_t类型和普通的int类型变量,并确保操作是原子的?两者都使用的程序具有相同的汇编代码。如何特别注意使操作原子化?
回答:
sig_atomic_t
不是原子数据类型。仅仅是允许您在信号处理程序的上下文中使用的数据类型,仅此而已。因此最好将其名称理解为“相对于信号处理而言是原子的”。
为了保证与信号处理程序之间的通信,仅需要原子数据类型的属性之一,即读取和更新将始终看到一致的值。其他数据类型(例如,也许long
long)可以用几个汇编程序指令来写上下部分,例如sig_atomic_t
,保证一次性读取和写入。
因此,平台可以选择任何整数基类型,sig_atomic_t
以保证volatile
sig_atomic_t可以在信号处理程序中安全使用。许多平台之所以选择int
这样做,是因为他们知道,它们int
是用一条指令编写的。
最新的C标准C11具有原子类型,但这是完全不同的东西。它们中的某些(那些是“无锁的”)也可以在信号处理程序中使用,但这又是一个完全不同的故事。
以上是 sig_atomic_t实际上如何工作? 的全部内容, 来源链接: utcz.com/qa/422100.html