gpt4 book ai didi

c - sig_atomic_t 实际上是如何工作的?

转载 作者:IT王子 更新时间:2023-10-29 00:16:34 26 4
gpt4 key购买 nike

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

最佳答案

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

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

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

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

关于c - sig_atomic_t 实际上是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24931456/

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