【发布时间】:2020-02-01 19:07:14
【问题描述】:
当compare and swap instruction 正在执行时,1.4 GHz Intel Core i5(64 位)CPU 是否会禁用中断?
换句话说,如果我有std::atomic<int> atom_int;,这是否意味着在atom_int++; 期间,信号(SIGINT、SIGSTP、SIGKILL)无法传递给进程?
我了解它的 CPU 特定问题,并希望得到任何特定 CPU 的答案。
【问题讨论】:
-
我认为在 intel 上它是作为一条指令实现的,所以不能被中断?
-
这是无法回答的,因为对于所有 CPU 的架构没有标准。另外,这不是 C++ 规范的一部分,所以我不确定为什么 C++ 会被标记为这个问题。
-
您是否尝试查看为您的目标系统生成的程序集?如果您没有特定的目标,请告诉我们您所指的系统范围。
-
但是,我希望您描述的行为。否则 atomic 属性没有意义。
-
这是一个关于英特尔 CPU 的特定于 CPU 的问题和一个关于在
std::atomic类型的操作期间接收信号的 C++ 语言问题的奇怪组合。你问一个问题,然后说“换句话说”,然后问一个完全不同的问题。 CPU 如何在单条指令期间处理中断与接收可能由中断传递或不传递的信号以及可能或可能不使用单条指令实现的代码有什么关系?
标签: c++ embedded cpu atomic microprocessors