Странное поведение от актера akka в scala параллельном программировании - PullRequest
0 голосов
/ 23 марта 2020

мой код:


Я запускал его три раза с одним и тем же номером, вывод:

Неверно!

the FibonacciNumber test Started!!!
the FibonacciNumber(8) is 
 20

Это правильно

the FibonacciNumber test Started!!!
the FibonacciNumber(8) is 
 21

Неверно!

the FibonacciNumber test Started!!!
the FibonacciNumber(8) is 
 19

1 Ответ

0 голосов
/ 23 марта 2020

Не безопасно иметь глобальную переменную, которая обновляется несколькими действующими лицами одновременно. Несколько акторов могут обрабатывать сообщения одновременно, и если два или более акторов попытаются обновить эти переменные одновременно, это не даст правильного результата. Таким образом, с этим алгоритмом вам по крайней мере нужно превратить counter и result в AtomicInteger.

. Гораздо лучше улучшить алгоритм, чтобы избежать глобальных переменных. Информация о состоянии должна передаваться между участниками, используя запросы и ответы, а не находиться в переменных, к которым одновременно могут обращаться несколько участников

...