在 中文 中使用 Volatile 的示例及其翻译为 日语
{-}
-
Ecclesiastic
-
Programming
-
Computer
Volatile的高级模式.
正确使用Volatile的模式.
在何时使用volatile?
这一节将介绍一种更加高级的模式,在该模式中,volatile.
所有非静态数据成员和基类是非volatile字面类型。
根据JLS,由于stop和num被声明为volatile,它们应该顺序一致。
对于联合体,至少有一个非静态数据成员是非volatile字面类型,.
注意C编程语言中,只能添加const/volatile到第一级:.
对于非联合体,所有非静态数据成员和基类是非volatile字面类型。
尽管如此,因为许多JVM没有实现volatile的顺序一致性功能,您就不能依赖此行为。
如果使用volatile关键字声明sGoodies,则恢复顺序一致性,代码也会按预期运行。
与C++不同的是,没有针对声明为volatile的变量的无序访问的真正机制。
安全使用volatile的另一种简单模式是:定期“发布”观察结果供程序内部使用。
例如,如果我们在前面的示例中忘记将flag声明为volatile,则线程2可能会看到未初始化的A。
与锁不同的是,volatile或atomic变量不能直接用来阻止其他线程干扰较长的代码序列。
就是说,在目前大多数的处理器架构上,volatile读操作开销非常低--几乎和非volatile读操作一样。
由于volatile简化了编码,并且状态标志并不依赖于程序内任何其他状态,因此此处非常适合使用volatile.
T的每个类类型或类类型数组的非静态数据成员M拥有复制构造函数,其参数为constM&或constvolatileM&。
如果您知道volatile关键字在Java语言中仅仅保证变量的可见性,而不保证原子性,那么这应该会引起您的注意。
T的每个类类型或类类型数组的非静态数据成员M拥有复制构造函数,其参数是M或constM&或constvolatileM&。
在记忆效应方面,向volatile写入数据类似于监视器释放,从volatile读取数据则类似于监视器获取。
在汽车驾驶室内会使用有各种各样的材料,然而这些材料均有可能产生VOC(挥发性化学物质VolatileOrganicCompounds的简称)。
在C和C++中,对volatile数据的访问可以通过访问非volatile数据进行重新排序,且没有原子性保证。
Return语句中,当操作数是拥有自动存储期的非volatile对象的名字,其并非函数形参或catch子句形参,且其具有与函数返回类型相同的类类型(忽略cv限定)时。
由于volatile简化了编码,并且状态标志并不依赖于程序内任何其他状态,因此此处非常适合使用volatile.
在未声明为extern的非局部非volatile非模板(C++14起)非inline(C++17起)变量声明上使用const限定符,会给予该变量内部连接。
对于除了函数类型或引用类型以外的任何类型T(包括不完整类型),C++类型系统中有另外三个独立的类型:const-限定的T、volatile-限定的T及const-volatile-限定的T。
若T是类型void、constvoid、volatilevoid或constvolatilevoid,则提供等于true的成员常量value。
如果声明flag具有类型atomic<bool>、atomic_bool(C/C++)或volatileboolean(Java),且初始值为false,则以下代码段不存在数据争用的情况:.
GNU内联汇编语句asmvolatile("":::"memory");或者__asm____volatile__("":::"memory");阻止GCC编译器跨越它乱序读/写指令。