As propriedades dos meus atores de Scala devem ser marcados @volatile?
-
06-07-2019 - |
Pergunta
Em Scala, se eu tiver uma aula simples da seguinte maneira:
val calc = actor {
var sum = 0
loop {
react {
case Add(n) =>
sum += n
case RequestSum =>
sender ! sum
}
}
}
Deveria meu campo sum
ser marcado @volatile
? Enquanto o ator é Logicamente um único thread (ou seja, as mensagens são processadas sequencialmente), as reações individuais podem estar acontecendo em threads separados e, portanto, o state
A variável pode estar sendo alterada em um segmento e depois ler de outro.
Solução
Você não precisa marcá -los como voláteis. A execução do seu código não está dentro de um bloco sincronizado, mas o ator sempre passará por um antes que seu código seja invocado, forçando assim a memória a um estado consistente entre os threads.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow