64位整数类型如何在32位操作系统上保证原子性



正如我所知,64位整数的工作方式因操作系统而异。我可以在装配说明中发现这是真的。下面是这样的。

#include <iostream>
int main()
{
uint64_t sharedValue = 0;
sharedValue = 0x100000002;    
}

32位64位

所以我认为32位操作系统不能保证64位整数的原子性,因为操作由多个指令组成。但64位操作系统可以。

所以我检查了64位整数。了解如何根据操作系统来保证原子性。

#include <iostream>
#include <atomic>
using namespace std;

int main()
{
atomic<uint64_t> num;
cout << boolalpha << num.is_lock_free() << endl;
}

32位原子性64位原子性

正如我所知,"lock_is_free=true"意味着这种类型可以在CPU中进行原子处理。

如果我理解正确的话,为什么32位os上的64位整数会通过lock_is_free((返回true。

汇编代码是多个的,但有些操作可以在CPU上原子化处理??

请回答我的问题。

这个堆栈溢出答案显示了它是如何在x86上完成的。可能其他体系结构也有类似的指令。

如何保证64位写入是原子的?

最新更新