42得票4回答
Java中的内存一致性- happens-before关系

在阅读Java文档中的关于内存一致性错误的内容时,我发现了两个相关的点,它们可以创建 happen-before 关系: 当一个语句调用 Thread.start() 时,与该语句具有 happens-before 关系的每个语句也都具有与新线程执行的每个语句都具有 happens-bef...

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...

17得票1回答
"强行发生在"是什么意思?

"强行发生在"这个短语在C++标准草案中被多次使用。 例如: 终止 [basic.start.term]/5 如果具有静态存储期的对象的初始化完成强行发生在std::atexit的调用之前(参见[support.start.term]),则传递给std::atexit的函...

16得票3回答
Java允许在不需要值的情况下优化掉volatile读取,同时也删除happens-before同步吗?

以下代码示例展示了一种常见的方式,演示由于缺少happens-before关系而导致并发问题的情况。private static /*volatile*/ boolean running = true; public static void main(String[] args) t...

16得票2回答
Kotlin协程的“happens-before”保证是什么?

Kotlin 协程是否提供任何“先行发生”保证呢? 例如,在这种情况下,mutableVar 的写入和(潜在地)其他线程上的后续读取之间是否存在“先行发生”保证:suspend fun doSomething() { var mutableVar = 0 withContex...

12得票2回答
直接ByteBuffer的发生时间顺序

我有一个直接ByteBuffer(非堆)在一个线程中,并使用JMM提供给我的机制将其安全地发布到另一个线程。这种happens-before关系是否扩展到被ByteBuffer包装的本地(非堆)内存?如果没有,我该如何安全地将直接ByteBuffer的内容从一个线程发布到另一个线程?此外,这不...

10得票2回答
我是否存在重新排序问题,这是由于引用逃逸引起的吗?

我有一个班级,我在其中缓存实例并在使用它们时克隆它们(数据是可变的)。 我想知道这样做是否会面临重新排序问题。 我已经查看了这个答案和JLS,但我仍然不确定。 public class DataWrapper { private static final ConcurrentMap&...

10得票2回答
.awaitTermination()方法是否与执行器中的工作建立先行发生关系?

多年来一直存在的问题: 在这个伪代码中,ExecutorService svc = Executors.newFixedThreadPool(3); svc.submit(new Runnable() { /* code A */ }); svc.shutdown(); if(svc.awai...

10得票4回答
Java Happens-Before 和线程安全

假设我有一个类,将HashMap包装如下:public final class MyClass{ private final Map<String, String> map; //Called by Thread1 public MyClass( ...

8得票3回答
如何理解golang内存模型中的通道通信规则?

在学习golang的过程中,当尝试理解内存模型规范中描述的通道通信时,我有些困惑,其中描述如下: 从通道发送数据在相应的接收操作完成之前发生。 关闭通道在因通道关闭而返回零值的接收操作之前发生。 从非缓冲通道接收数据在发送操作完成之前发生。 在容量为C的通道上第k个接收操作在第k+C个发送...