首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非线程安全数据(易失性备份)的AtomicBoolean保护

非线程安全数据(易失性备份)的AtomicBoolean保护
EN

Stack Overflow用户
提问于 2014-05-05 13:03:43
回答 1查看 544关注 0票数 1

使用AtomicBoolean作为非阻塞锁用于从多个线程对非线程安全的数据进行读写访问是否安全,使用构造:

代码语言:javascript
复制
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
}

在此结构之外无法访问数据。我几乎可以肯定,这是安全的,因为不稳定的携带效应。我说的对吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-05 13:08:02

高层次的考虑必须是它是否安全地阻止了对关键资源的并发访问。这是因为AtomicBoolean提供了必要的保证。作为thump的规则,JMM的设计方式是,如果您正确地实现了高层逻辑,那么低级别的东西也是如此。

正如您在问题中所做的那样,volatile会更详细地读和写,排除意外的重新排序,就像您所期望的那样(也称为“打包”)。

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23473208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档