温馨提示:本文翻译自stackoverflow.com,查看原文请点击:c++ - Do microprocessors disable interrupts while compare and swap instructions are executed?
c++ embedded cpu atomic microprocessors

c++ - 在执行比较和交换指令时,微处理器是否禁用中断?

发布于 2020-04-10 23:52:53

执行比较和交换指令时,1.4 GHz Intel Core i5(64位)CPU是否禁用中断

在如果我有换句话说std::atomic<int> atom_int;,是否在平均值atom_int++;的信号(SIGINTSIGSTPSIGKILL)不能被传递到进程?

我了解其特定于CPU的问题,希望能得到针对任何特定CPU的答案。

查看更多

提问者
PnotNP
被浏览
67
Andreas Wenzel 2020-02-03 00:49

以下两件事不一定相同:

  1. C ++级别的原子操作(std :: atomic)
  2. 保证是原子的汇编CPU指令

例如,现代的英特尔处理器保证对64位对齐地址的64位读/写是原子的。它还保证以原子方式执行带有LOCK前缀的指令。

另一方面,在C ++中,std::atomic保证对对象的操作是原子执行的。如果可能的话,一个好的编译器将为此使用单个原子CPU指令。但是,对于较大的对象,无法通过单个原子CPU指令来实现这种原子性。因此,只能通过使用更复杂的同步方法(例如locks)来保证原子性这种复杂的同步方法需要多个CPU指令,因此总是可以中断。

您可以std:atomic通过调用来确定是否正在使用锁std::atomic::is_lock_free()