내 스칼라 배우의 속성이 @volatile으로 표시되어야합니까?
-
06-07-2019 - |
문제
Scala에서 다음과 같이 간단한 수업이있는 경우 :
val calc = actor {
var sum = 0
loop {
react {
case Add(n) =>
sum += n
case RequestSum =>
sender ! sum
}
}
}
내 현장 sum
표시됩니다 @volatile
? 배우는 논리적으로 단일 스레드 (즉, 메시지는 순차적으로 처리됩니다), 개별 반응은 별도의 스레드에서 발생할 수 있습니다. state
한 스레드에서 변수가 변경되고 다른 스레드에서 읽을 수 있습니다.
해결책
당신은 그것들을 휘발성으로 표시 할 필요가 없습니다. 코드의 실행은 동기화 된 블록 내부에 있지 않지만 액터는 코드가 호출되기 전에 항상 하나를 통과하여 메모리가 스레드를 가로 질러 일관된 상태로 강화합니다.
제휴하지 않습니다 StackOverflow