32得票4回答
如何在.NET中追踪StackOverflowException的原因?

当我运行以下代码时,会出现StackOverflowException异常:private void MyButton_Click(object sender, EventArgs e) { MyButton_Click_Aux(); } private static volatile ...

32得票5回答
使用volatile关键字与可变对象

在Java中,我了解到volatile关键字提供了变量的可见性。问题是,如果一个变量是指向可变对象的引用,volatile是否也可以提供该对象内部成员的可见性? 在下面的示例中,如果多个线程正在访问volatile Mutable m并更改value,那么它能否正常工作? 示例:class...

32得票3回答
C语言中的易失性数组

在C语言中,volatile关键字用于防止编译器对变量进行某些优化及其他微妙的更改。 例如:volatile int my_int = 0; 创建一个整数。在某些情况下,它可能会阻止后续的优化:while(my_int == 0); // Loop until my_int != 0 进行...

32得票2回答
C++11中的Volatile

在C++11标准中,机器模型从单线程机器变成了多线程机器。 这是否意味着,在C++11中,典型的静态int x; void func() { x = 0; while (x == 0) {} }优化读取被优化掉的例子将不再发生? 编辑:对于那些不知道这个例子(我真的很惊讶)的人,请阅读这个...

31得票1回答
重入锁访问的字段是否需要使用volatile关键字?

我的问题是关于使用ReentrantLock是否能够保证与使用synchronized关键字相同的字段可见性。例如,在以下类A中,由于使用了synchronized关键字,因此不需要将sharedData字段声明为volatile。class A { private double sha...

31得票6回答
C语言中的'volatile'关键字

我读了一些关于 C 语言中 volatile 的教程,但我仍然无法理解。有人说 volatile 告诉编译器优化器不应以某些方式优化涉及此变量的操作。这意味着每当寄存器中变量的值被更改时,该值都应影响内存。 另外,也有人说,volatile 意味着该值可以通过代码之外的手段进行更改。 我无法理...

31得票4回答
C#中的'volatile'关键字仍然存在问题吗?

Joe Albahari的多线程系列文章是必读的,对于任何进行C#多线程编程的人来说,这些文章应该被熟记于心。 但在第四部分中,他提到了volatile的问题: 请注意,应用volatile无法阻止写入后紧接着读取的交换,这可能会导致令人费解的问题。Joe Duffy通过以下示例很好...

30得票2回答
Interlocked.Exchange和Volatile.Write有什么区别?

Interlocked.Exchange和Volatile.Write有什么区别?两种方法都可以更新某个变量的值。能否有人总结一下何时使用它们? Interlocked.Exchange Volatile.Write 特别是我需要更新数组中的double项,并且我希望另一个线程看到最新的值...

30得票4回答
易失性 vs 可读/写的易失性?

我找不到任何VolatileRead/write(尝试...)的示例,但仍然有疑问:何时应该使用volatile与VolatileRead?据我所知,volatile的整个目的是创建一半的屏障,因此: 1. 对于读操作,在当前操作之后读取/写入(在其他线程上),在屏障之前不会通过。因此,我们...

29得票3回答
AtomicReferenceFieldUpdater - 方法set、get、compareAndSet的语义

来自Java AtomicReferenceFieldUpdater文档: 请注意,此类中compareAndSet方法的保证比其他原子类要弱。因为该类无法确保字段的所有使用都适用于原子访问的目的,所以它只能保证与compareAndSet和set的其他调用相关的原子性和易失性语义。 ...