关键词:
【中文标题】如何理解 AKKA 中使用的这种 CCAS 锁定机制?【英文标题】:How to understand this CCAS locking machanizion used in AKKA? 【发布时间】:2011-09-05 16:01:55 【问题描述】:我刚刚在 akka 中遇到了一段代码。
https://codereview.scala-lang.org/fisheye/browse/~raw,r=25521/scala-svn/scala/trunk/test/files/presentation/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标签。
欢迎任何建议!不知道为什么有人投票关闭这个问题。
相关:
Can anyone interpret this C++ code (from OpenJDK6) into plain English?
【问题讨论】:
我认为你需要改进你的问题。你到底有什么不明白的? 我只需要一些关于它如何工作的基本概念。谢谢,先生:) 【参考方案1】:这是我对代码的理解。它使用获取的(AtomicBoolean)作为互斥锁。如果任何线程试图获取锁,那么它将设置为真。那么任何其他线程都无法获取锁,因为它们将从获取中获取真并返回假,直到该获取的此线程设置回假为止。
由于获取的不是集合,所以不会有ABA问题。所以它可以工作。
如果我错了,请纠正我。
【讨论】:
没有“直到线程完成”,如果你想阻塞,等待锁可用,你需要循环tryLock直到它成功(并且你有锁) 感谢您的正确。这只是由于我的措辞错误。 :-) 我会改正的。使用云祺虚拟机备份软件备份h3ccas虚拟机(代码片段)
1、进入云祺虚拟机备份系统,选择【备份/恢复】——【虚拟机备份】,新建备份任务。2、在H3CCAS虚拟化类型下勾选要备份的虚拟机,选择的虚拟机即显示在【已选择的虚拟机】下面,滚动页面到底部,点击【下一步】。3、备... 查看详情
使用云祺虚拟机备份软件恢复h3ccas虚拟机
1、进入云祺虚拟机备份系统,选择【备份/恢复】—【虚拟机恢复】,新建恢复任务。2、在H3CCASr虚拟化类型下勾选要需要恢复的备份点,点击【下一步】。3、设置恢复目标宿主机,并按需配置恢复虚拟机的名称、状态、存储、... 查看详情
akka中使用logback日志框架
...品环境,当然你可以整合SLF4J这样的日志系统,下面介绍如何在Akka中使用Logback记录日志。 1.创建Maven工程引入相关依赖。<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSche 查看详情
如何让 Shiro 在 Scala + Akka + Spray 环境中工作
】如何让Shiro在Scala+Akka+Spray环境中工作【英文标题】:HowcanimakeShiroworkinScala+Akka+Sprayenvironment【发布时间】:2013-07-2209:25:57【问题描述】:我想我没有正确理解工作流程。我正在使用ApacheShiro和Stormpath在Scala中编写Web服务。我的用... 查看详情
如何自动扩展分片 Akka 集群?
】如何自动扩展分片Akka集群?【英文标题】:HowtoscaleshardedAkkaClusterautomatically?【发布时间】:2020-12-0908:56:58【问题描述】:Akka集群文档没有指定我们如何自动扩展集群-添加或删除节点。这应该如何在Akka生态系统中实现?例如... 查看详情
从谷歌云中的虚拟机锁定
...,我们无法通过浏览器连接到它。这里可以做什么?我们如何才能重新获得对我们机器的访问权限?VM是UbuntuServer16.04。【问题讨论】:仔细检查 查看详情
Akka 是不是淘汰了 Camel?
...【发布时间】:2015-03-2009:15:45【问题描述】:我对Akka的理解是它提供了一个模型,多个独立的线程可以通过这种模型以高度并发的方式相互通信。它使用“演员模型”,其中每个线程都是有特定工作要做的“演员”。您可以协... 查看详情
談談理解中的驅動
驱动,熟悉又陌生的名词,熟悉是因为我们都遇到过,外设接入电脑的时候,都被要求安装驱动,否则无法使用。为什么像键盘这种设备不用安装驱动?因为在系统早就自带了键盘这种外设的驱动。所以,当系统没有我们的... 查看详情
如何使用 akka 连接到 Unix 套接字?
】如何使用akka连接到Unix套接字?【英文标题】:HowcanoneconnecttoaUnixsocketusingakka?【发布时间】:2014-11-0608:12:03【问题描述】:虽然在akka中使用TCP或UDP连接到java.net.InetSocketAddress相对容易,但API中似乎没有SocketAddress和Unix-sockets的等... 查看详情
如何在akka中扩展超级演员的行为
】如何在akka中扩展超级演员的行为【英文标题】:Howextendbehaviourofsuperactorinakka【发布时间】:2017-09-2907:29:28【问题描述】:我想使用akkaactor实现CRUD操作。我是akka新手,所以不知道akkaactor的设计基础。我想在多个子actor中分享akka... 查看详情
如何在休眠中进行乐观锁定
】如何在休眠中进行乐观锁定【英文标题】:Howtodooptimisticlockinginhibernate【发布时间】:2011-10-1801:14:46【问题描述】:我对Hibernate和Spring完全陌生,并且在尝试学习Spring、Hibernate、Maven等时,我只知道如何使用这三者运行一个hello... 查看详情
如何使用stampedlock乐观锁定?(我无法理解来自javadoc的代码示例)
最近我了解了StampedLock的存在?qazxsw指出我意识到它是改进的ReentrantReadWriteLock有一些差异:不是可重入的支持乐观锁定支持从readLock升级到writeLock我也从java中读过例子,但我不明白那段代码:https://docs.oracle.com/javase/10/docs/api/java/... 查看详情
如何在akka中禁用“收到八卦状态”登录?
】如何在akka中禁用“收到八卦状态”登录?【英文标题】:Howtodisable"Receivedgossipstatus"loginakka?【发布时间】:2017-05-2415:16:22【问题描述】:我在运行时使用akka集群我收到这样的日志Receivedgossipstatusfrom[akka.tcp://test@ip:port],ch... 查看详情
如何在 Akka Http 中使用 HttpResponse
】如何在AkkaHttp中使用HttpResponse【英文标题】:HowtoconsumeHttpResponseinAkkaHttp【发布时间】:2022-01-1519:02:00【问题描述】:importakka.actor.ActorSystemimportakka.http.scaladsl.Httpimportakka.http.scaladsl.model.HttpMethods,HttpRequest,Uriimpor 查看详情
乐观锁定:使用其他资源修改资源(代码片段)
...ag(RFC7232)方法来实施并发访问规则吗?如果没有,我们如何修改API结构或使用其他方法来实现它?我的问题是如何使用来自多个资源的ETag来强制执行RFC。我理解在这种特殊情况下我们可以使用POST逐个添加产品等。但在现实生... 查看详情
Akka 的 I/O 是如何工作的?
】Akka的I/O是如何工作的?【英文标题】:HowdoesI/OworkinAkka?【发布时间】:2011-09-2514:33:01【问题描述】:当您需要执行I/O(即数据库操作)时,actor模型(在Akka中)如何工作?据我了解,阻塞操作会引发异常(并且由于Akka使用的N... 查看详情
Akka 有限状态机实例
】Akka有限状态机实例【英文标题】:Akkafinitestatemachineinstances【发布时间】:2018-11-1320:16:30【问题描述】:我正在尝试将Akka的有限状态机框架用于我的用例。我正在开发一个系统来处理经过各种状态的请求。这里的请求是需要连... 查看详情
如何在 Akka Actor 中使用 MYSQL jdbc 实现
】如何在AkkaActor中使用MYSQLjdbc实现【英文标题】:HowtoimplementusingMYSQLjdbcinanAkkaActor【发布时间】:2016-04-0718:47:39【问题描述】:嘿,我读了这个jdbc文档https://www.playframework.com/documentation/2.1.0/ScalaDatabase这个问题Isitgoodtoputjdbcoperations... 查看详情