gpt4 book ai didi

optimistic-concurrency - 2 个线程执行 myAtomicReference.compareAndSet(expected,new Date())

转载 作者:行者123 更新时间:2023-12-02 02:30:04 26 4
gpt4 key购买 nike

static boolean unsynchronizedSetter(Date expected){
Date newDate = new Date();
AtomicReference<Date> myAtomicReference = Lookup.getAtomicRef();
boolean myStatus = myAtomicReference.compareAndSet(expected, newDate); //CAS
return myStatus;
}

问:如果有 2 个线程执行它,哪个对象将存储在原子引用中?

在多处理器机器中,2 个线程可以在同一个时钟周期内执行 CAS。假设他们都使用相同的 myAtomicReference 对象来执行 CAS,都使用正确的“预期”值,但他们尝试放入 2 个不同的对象,即 2 个 newDate。其中一个必须失败,但是 myStatus 在该线程中是否为 false?

我猜想 CompareAndSwap 的一种硬件实现会使线程排队等待更新。我想即使 2 个处理器在同一个时钟周期内执行 CAS 指令,其中一个也可能被延迟了。

最佳答案

Q: If 2 threads executes it, which object will get stored in the atomic reference?

没有人知道。根据javadoc , 其中之一。

In a multi-processor machine, 2 threads could be performing the CAS in the same clock cycle.

据我所知,目前的 Intel/AMD 多核 CPU 没有全局时钟。

One of them must fail, but will myStatus be false in that thread?

必须的,否则就代表成功了,整个java.util.concurrent就分崩离析了。我很确定,一个线程中的 myStatus 必须为 false,即使两个线程都试图将同一个对象放在那里也是如此。

I guess one hardware implementation of CompareAndSwap would make the threads queue up to do their updates.

我不会说“排队”(这听起来像是操作系统做的事情),CAS 指令会被硬件延迟。

关于optimistic-concurrency - 2 个线程执行 myAtomicReference.compareAndSet(expected,new Date()),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4161728/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com