InterlockedIncrement64和__sync_add_and_fetch会导致读取错误吗?

时间:2015-06-03 11:11:20

标签: multithreading visual-c++ gcc atomic compiler-optimization

假设我们有一个64位的全局变量,最初为零。

volatile uint64_t gDest = 0;

存储(原子) - 在一个线程中。 在某些时候,我们以原子方式递增此变量的64位值。

AtomicIncrement64 (&gDest); 

这里的AtomicIncrement64 - 可以是编译器内部函数之一,也可以是内置函数,如InterlockedIncrement64(cl)和__sync_add_and_fetch(GCC)

加载 - 在另一个帖子中

uint64_t a = gDest;

这里,如果编译器可能使用两个机器指令实现了加载操作:第一个将低32位读入eax,第二个将高32位读入edx。在这种情况下,如果两条指令之间的gDest并发原子存储变得可见,会导致读取错误吗?

0 个答案:

没有答案