Java 如何理解阿克卡使用的CCAS锁定机器?

Java 如何理解阿克卡使用的CCAS锁定机器?,java,scala,locking,akka,compare-and-swap,Java,Scala,Locking,Akka,Compare And Swap,我刚刚在akka遇到一段代码 下面列出了我感兴趣的核心方法 /** * 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

我刚刚在akka遇到一段代码

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

/**
 * 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) 这门课的目的是什么

2) 有关于它如何工作的提示或背景知识吗

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

欢迎任何意见!不知道为什么会有人投票反对这个问题

相关:


以下是我对代码的理解。它使用获得的(原子布尔)作为互斥。如果任何线程试图获取锁,那么它将设置为true。然后任何其他线程都无法获取锁,因为它们将从acquired中获取true并返回false,直到该线程将此acquired设置回false

由于获得的不是来自集合,因此不会有ABA问题。所以它可以工作


如果我错了,请纠正我。

我认为您需要改进您的问题。你到底不明白什么?我只需要一些关于它如何工作的基本概念。谢谢,先生:)这里没有“直到线程完成”,如果你想阻塞,等待锁变为可用,你需要循环tryLock直到它成功(并且你有了锁),谢谢你的正确性。这只是因为我的措辞错误。:-)我会改正的。