相关疑难解决方法(0)

在处理易失性存储器位置时,编译器必须遵循什么规则?

我知道当从几个线程或进程写入的内存位置读取时,volatile属性应该用于该位置,就像下面的一些情况一样,但我想知道更多关于它对编译器的实际限制,基本上是什么规则编译器在处理这种情况时必须遵循,并且有任何例外情况,尽管可以同时访问存储器位置,但程序员可以忽略volatile关键字.

volatile SomeType * ptr = someAddress;
void someFunc(volatile const SomeType & input){
 //function body
}
Run Code Online (Sandbox Code Playgroud)

c++ memory compiler-construction rules volatile

12
推荐指数
4
解决办法
5157
查看次数

x86_64上的原子双浮点或SSE/AVX向量加载/存储

在这里(以及一些SO问题)我看到C++不支持像无锁的东西,std::atomic<double>并且还不能支持像原子AVX/SSE向量这样的东西,因为它依赖于CPU(虽然现在我知道CPU,ARM, AArch64和x86_64有矢量).

但是double在x86_64中对s或向量的原子操作是否有汇编级支持?如果是这样,支持哪些操作(如加载,存储,添加,减去,可能相乘)?MSVC++ 2017实现哪些操作无锁atomic<double>

c++ assembly x86-64 vectorization stdatomic

5
推荐指数
2
解决办法
1435
查看次数