gpt4 book ai didi

scala - 我的 Scala Actor 的属性是否应该标记为@volatile?

转载 作者:行者123 更新时间:2023-12-04 12:15:21 27 4
gpt4 key购买 nike

在 Scala 中,如果我有一个简单的类,如下所示:

val calc = actor {
var sum = 0
loop {
react {
case Add(n) =>
sum += n
case RequestSum =>
sender ! sum
}
}
}

如果我的领域 sum被标记 @volatile ?虽然参与者在逻辑上是单线程的(即消息是按顺序处理的),但各个 react 可能发生在不同的线程上,因此 state变量可能在一个线程上被更改,然后从另一个线程读取。

最佳答案

您不需要将它们标记为 volatile 。代码的执行不在同步块(synchronized block)内,但参与者总是在调用代码之前通过一个同步块(synchronized block),从而强制内存跨线程进入一致状态。

关于scala - 我的 Scala Actor 的属性是否应该标记为@volatile?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1031167/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com