以下两件事不一定相同:
例如,现代的英特尔处理器保证对64位对齐地址的64位读/写是原子的。它还保证以原子方式执行带有LOCK前缀的指令。
另一方面,在C ++中,std::atomic
保证对对象的操作是原子执行的。如果可能的话,一个好的编译器将为此使用单个原子CPU指令。但是,对于较大的对象,无法通过单个原子CPU指令来实现这种原子性。因此,只能通过使用更复杂的同步方法(例如locks)来保证原子性。这种复杂的同步方法需要多个CPU指令,因此总是可以中断。
您可以std:atomic
通过调用来确定是否正在使用锁std::atomic::is_lock_free()
。