我正在查找关键字volatile以及它的用途,我得到的答案非常多:
它用于防止编译器优化代码.
有一些示例,例如轮询内存映射硬件时:没有volatile轮询循环将被删除,因为编译器可能会识别出条件值永远不会更改.但由于只有一个例子或两个例子,它让我思考:volatile在避免不必要的优化方面我们还需要使用其他情况吗?条件变量是唯一volatile需要的地方吗?
我认为优化是特定于编译器的,因此未在C++规范中指定.这是否意味着我们必须通过直觉,说嗯,我怀疑如果我没有声明该变量volatile或者是否有任何明确的规则,我的编译器将废除它?
我知道C++中的volatile 是如何工作的.但是,我仍然对为什么我们需要挥发性感到困惑.我认为唯一的原因是我们需要监听变量是否发生了变化,如下面的代码所示:
volatile int some_int = 100;
while(some_int==100) {
doSomething()
}
Run Code Online (Sandbox Code Playgroud)
程序员需要知道some_int这个词是否改变了,所以他使用"volatile".我可以使用关键词"静态"吗?
大多数情况下,我认为如果在多线程中需要同步,我们应该互斥(锁定)以进行同步.请原谅我可怜的英文:)
C++20 包括atomic<float>和的专门化atomic<double>。这里有人能解释一下这有什么实际用途吗?我能想象的唯一目的是,当我有一个线程在随机点异步更改原子双精度或浮点并且其他线程异步读取该值时(但易失性双精度或浮点实际上应该在大多数平台上执行相同的操作)。但这种需要应该是极其罕见的。我认为这种罕见的情况不能证明纳入 C++20 标准是合理的。
你好论坛 - 我有一些关于SIMD内在的类似/相关问题我在网上搜索了包括stackoverflow但没有找到好的答案所以请求你的帮助.
基本上我试图理解64位CPU如何在一次读取中获取所有128位,以及这种操作的要求是什么.
c++ ×3
volatile ×3
c ×1
declaration ×1
memory-model ×1
mutex ×1
optimization ×1
simd ×1
sse ×1
stdatomic ×1
x86-64 ×1