首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何理解在AKKA中使用的CCAS锁定机制?

如何理解在AKKA中使用的CCAS锁定机制?
EN

Stack Overflow用户
提问于 2011-09-05 16:01:55
回答 1查看 246关注 0票数 0

我刚在阿克卡发现了一段代码。

https://codereview.scala-lang.org/fisheye/browse/~raw,r=25521/scala-svn/scala/trunk/test/files/presentation/akka/src/akka/util/LockUtil.scala

下面列出了我感兴趣的核心方法。

代码语言:javascript
复制
/**
 * A very simple lock that uses CCAS (Compare Compare-And-Swap)
 * Does not keep track of the owner and isn't Reentrant, so don't nest and try to stick to the if*-methods
 */
class SimpleLock {
  val acquired = new AtomicBoolean(false)

  def ifPossible(perform: () => Unit): Boolean = {
    if (tryLock()) {
      try {
        perform
      } finally {
        unlock()
      }
      true
    } else false
  }



  def tryLock() = {
    if (acquired.get) false
    else acquired.compareAndSet(false, true)
  }

  def tryUnlock() = {
    acquired.compareAndSet(true, false)
  }

有两个相关的子问题。

1)这类SimpleLock的用途是什么?

( 2)对它的工作原理有什么提示或背景知识吗?

我认为,由于这段代码是用JAVA和scala编写的,所以它利用了AtomicBoolean类。所以我也会添加java标记。

欢迎任何建议!不知道为什么有人投票赞成这个问题。

相关:

Can anyone interpret this C++ code (from OpenJDK6) into plain English?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-06 05:03:16

这是我对密码的理解。它使用一个获得性(AtomicBoolean)作为互斥体。如果任何线程试图获取锁,那么它将被设置为true。然后,任何其他线程都无法获得锁,因为它们将从已获得的锁中获得真锁,并返回false,直到该线程将获取的锁设置为false为止。

由于获得不是从一个集合,它将不会有ABA问题。这样才能起作用。

如果我错了,请纠正我。

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

https://stackoverflow.com/questions/7310377

复制
相关文章

相似问题

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