문제

Scala에서 다음과 같이 간단한 수업이있는 경우 :

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

내 현장 sum 표시됩니다 @volatile? 배우는 논리적으로 단일 스레드 (즉, 메시지는 순차적으로 처리됩니다), 개별 반응은 별도의 스레드에서 발생할 수 있습니다. state 한 스레드에서 변수가 변경되고 다른 스레드에서 읽을 수 있습니다.

도움이 되었습니까?

해결책

당신은 그것들을 휘발성으로 표시 할 필요가 없습니다. 코드의 실행은 동기화 된 블록 내부에 있지 않지만 액터는 코드가 호출되기 전에 항상 하나를 통과하여 메모리가 스레드를 가로 질러 일관된 상태로 강화합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top