加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

我的Scala演员的属性应该标记为@volatile吗?

发布时间:2020-12-16 09:27:19 所属栏目:安全 来源:网络整理
导读:在Scala中,如果我有一个简单的类,如下所示: val calc = actor { var sum = 0 loop { react { case Add(n) = sum += n case RequestSum = sender ! sum } }} 我的字段总和应该标记为@volatile吗?虽然actor在逻辑上是单线程的(即消息是按顺序处理的),但是各
在Scala中,如果我有一个简单的类,如下所示:

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

我的字段总和应该标记为@volatile吗?虽然actor在逻辑上是单线程的(即消息是按顺序处理的),但是各个反应可能发生在不同的线程上,因此状态变量可能在一个线程上被改变,然后从另一个线程读取.

解决方法

您不需要将它们标记为易失性.代码的执行不在同步块中,但是在调用代码之前,actor总是会通过一个代码,从而迫使内存跨线程进入一致状态.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读