Я только что наткнулся на кусок кода в акке.
https://codereview.scala -lang.org / Fisheye / просмотр / ~ сырыми, г = 25521 / Scala-СВН / Scala / багажник / тест / файлы / презентации / AKKA / SRC / AKKA / Util / LockUtil.scala
Основные методы, которые меня интересуют, перечислены ниже.
/**
* 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.
Любой совет приветствуется! Не уверен, почему кто-то проголосовал за этот вопрос близко.
Связанный:
Кто-нибудь может интерпретировать этот код C ++ (из OpenJDK6) в простой английский?