89得票6回答
在C#中说明关键字volatile的用法

我想编写一个小程序来直观地演示volatile关键字的行为。理想情况下,这应该是一个并发访问非volatile静态字段的程序,由于这个原因导致了不正确的行为。 在同一程序中添加volatile关键字应该可以解决这个问题。 但是我尝试了好几次,开启了优化等,总是没有使用"volatile"关...

86得票2回答
易失性结构体语义

如果一个结构体类型的变量实例被声明为volatile(如果其字段在可重入代码中被访问),这是否足够,或者必须声明特定字段为volatile? 换句话说,以下两种方式之间有什么语义差异(如果有):typdef struct { uint8_t bar; } foo_t; volatile...

85得票13回答
Java中volatile关键字的最简单易懂的示例

我正在阅读有关Java中volatile关键字的内容,并完全理解了其理论部分。 但是,我正在寻找一个好的案例示例,展示如果变量不是volatile会发生什么以及如果它是volatile会发生什么。 下面的代码片段不能按预期工作(摘自这里): class Test extends Thre...

83得票6回答
编译器是否允许优化掉本地的易失变量?

根据 C++17 标准,编译器是否允许对此进行优化:int fn() { volatile int x = 0; return x; } 变成这样?int fn() { return 0; } 如果是,为什么?如果不是,为什么不是? 以下是对此主题的一些思考:当前...

74得票3回答
为什么在std::atomic中到处使用volatile限定符?

从我阅读的Herb Sutter和其他人的内容中,你会认为volatile和并发编程在C/C++方面是完全正交的概念。 然而,在GCC 实现中,所有std::atomic的成员函数都有volatile限定符。在Anthony Williams的实现中也是如此。 那么问题来了,我的atomi...

70得票2回答
如何理解读内存屏障和volatile?

有些语言提供了volatile修饰符,它被描述为在读取支持变量的内存之前执行"读内存屏障"。 读内存屏障通常被描述为确保CPU在执行屏障之前已经执行了所请求的读取操作,然后才执行屏障之后请求的读取操作。然而,使用这个定义,似乎仍然可能读取到旧值。换句话说,在特定顺序下进行读取并不意味着必须查...

70得票3回答
Kotlin中的易失属性是什么?

如何在 Kotlin 中将变量标记为 volatile? volatile public var tmpEndedAt: Long? = null 会给出以下错误提示: "未解决的引用: volatile"

69得票4回答
为什么Java 5+中的volatile不能确保另一个线程的可见性?

根据: http://www.ibm.com/developerworks/library/j-jtp03304/ 在新的内存模型中,当线程A向易失变量V写入,并且线程B从V读取时,任何在V写入时对A可见的变量值现在都保证对B可见 许多互联网上的资料都指出,以下代码永远不应该打印...

67得票6回答
Java中的volatile int是线程安全的吗?

在Java中,一个易失性的int是否是线程安全的?也就是说,它可以在没有锁定的情况下被安全地读取和写入吗?

66得票4回答
__asm__ __volatile__ ("" : : : "memory") 的工作原理

__asm__ __volatile__ ()基本上是一种内联汇编的用法,它允许在C或C++代码块中直接嵌入汇编指令。在ARM架构中,使用"memory"修饰符可以确保内存位置被视为可变的,强制刷新缓存并防止编译器优化。