我刚在阿克卡发现了一段代码。
下面列出了我感兴趣的核心方法。
/**
* 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?
发布于 2011-09-06 05:03:16
这是我对密码的理解。它使用一个获得性(AtomicBoolean)作为互斥体。如果任何线程试图获取锁,那么它将被设置为true。然后,任何其他线程都无法获得锁,因为它们将从已获得的锁中获得真锁,并返回false,直到该线程将获取的锁设置为false为止。
由于获得不是从一个集合,它将不会有ABA问题。这样才能起作用。
如果我错了,请纠正我。
https://stackoverflow.com/questions/7310377
复制相似问题