gpt4 book ai didi

java - 非线程安全数据的 AtomicBoolean 保护( volatile 搭载)

转载 作者:行者123 更新时间:2023-11-29 05:23:56 25 4
gpt4 key购买 nike

使用 AtomicBoolean 作为非阻塞锁来读取和写入来自多个线程的非线程安全数据是否安全,使用构造:

if (lock.compareAndSet(false, true)) {
try {
//Access non-volatile fields, non-atomic arrays and not thread-safe classes
} finally {
lock.set(false);
}
} else {
//Access denied, try again later or right now
}

此结构之外的数据不可访问。由于不稳定的搭载效应,我几乎可以肯定它是安全的。我说得对吗?

最佳答案

高层的考虑必须是它是否安全地排除了对关键资源的并发访问。这为 AtomicBoolean 提供了必要的保证。一般而言,JMM 的设计方式是,如果您正确地实现了高级逻辑,那么低级逻辑也会正确实现。

如您在问题中所做的那样更详细,volatile 读取和写入会像您预期的那样排除意外的重新排序(也称为“搭载”)。

您基本上也在做 Lock 所做的事情。 ReentrantLock 将使用 int 而不是 boolean,并且 Lock 提供一个等待队列,它是一个简单的原子变量没有。

AbstractQueuedSynchronizer显示了如何围绕一个原子 int 变量实现该逻辑(类似于您的逻辑)。

关于java - 非线程安全数据的 AtomicBoolean 保护( volatile 搭载),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23473208/

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