46得票4回答
在C++结构体/类中,非静态成员变量是否需要标记为volatile才能在成员函数中被视为volatile?

class MyClass { int x, y; void foo() volatile { // do stuff with x // do stuff with y } }; 我需要将x和y声明为volatile,还是所有...

46得票5回答
在使用双重锁定时,将单例实例设为volatile有什么意义?

private volatile static Singleton uniqueInstance 在单例模式中,使用双重锁定方法进行同步时,为什么需要将单个实例声明为volatile?如果不声明为volatile是否可以实现相同的功能?

45得票5回答
易失性变量的读取速度与普通读取速度一样快吗?

我知道向volatile变量写入数据会将其从所有CPU的内存中刷新,但我想知道读取volatile变量是否和普通变量一样快? volatile变量是否有可能被放置在CPU缓存中,还是总是从主内存中获取?

44得票4回答
对一个易失域的引用不会被视为易失的,其含义是什么?

以下代码using System.Threading; class Test { volatile int counter = 0; public void Increment() { Interlocked.Increment(ref counter...

43得票2回答
"volatile"关键字在数组下标中的作用是什么?

在我浏览cppreference时,我看到了一个在函数参数中使用的奇怪类型数组,就像这样: void f(double x[volatile], const double y[volatile]); 那么,volatile关键字出现在数组下标中的目的是什么?它有什么作用?

43得票5回答
易失性保证和乱序执行

重要编辑:我知道关于“发生在”在进行两个赋值的线程中,我的问题是另一个线程是否可能在"a"仍然为null的情况下读取非空的"b"。所以我知道如果你从与之前调用setBothNonNull(...)的线程相同的线程中调用doIt(),它不会抛出NullPointerException。但是如果有...

39得票3回答
Java内存模型:volatile变量和happens-before关系

我想澄清一下volatile变量如何与happens-before关系配合工作。让我们假设有以下变量:public static int i, iDst, vDst; public static volatile int v; 以及线程A:i = 1; v = 2; 和线程B:vDst = v...

39得票6回答
易失变量可以在序列点之间被多次读取吗?

我正在制作自己的C编译器,以尽可能了解C的详细信息。现在我正在尝试准确理解volatile对象的工作原理。 令人困惑的是,代码中的每个读取访问都必须严格执行(C11,6.7.3p7): 具有易失性限定类型的对象可能以实现未知的方式进行修改或具有其他未知的副作用。因此,任何引用这种对象的表...

39得票7回答
C语言中的volatile变量和缓存内存

缓存由硬件透明地控制,因此如果我们在C程序中使用易失性变量,如何保证程序每次从指定的实际内存地址而不是缓存中读取数据? 我的理解是: 易失性关键字告诉编译器变量引用不应该被优化,并且应根据代码中编程的方式进行读取。 缓存由缓存硬件透明地控制,因此当处理器发出地址时,它不知道数据是来自缓存...

38得票4回答
如何在Java中声明数组元素为volatile?

在Java中有没有一种方法可以声明数组元素为 volatile?例如:volatile int[] a = new int[10]; 声明了数组引用volatile,但是数组元素(例如a[1])仍然不是volatile。因此我正在寻找类似于以下内容:volatile int[] a = new...