Безопасна ли эта функция для одновременного выполнения? - PullRequest
1 голос
/ 26 ноября 2010
  def isSafe( i:Int) = {
    var count = i
    var acc = 0
    while(count!=0){
      acc += i*i
      count -= 1
    }
    acc
  }

Ответы [ 2 ]

7 голосов
/ 26 ноября 2010

Если под безопасным вы подразумеваете, что он возвращает один и тот же результат независимо от того, сколько потоков его вызывает и в каком порядке, тогда да, это безопасно. Это связано с тем, что он не изменяет никакие общие области памяти, а только свои локальные переменные.

3 голосов
/ 26 ноября 2010

Это безопасно, нет общего состояния, которое могло бы привести к загрязнению между потоками.

Это также чрезмерно сложно, следующее определение и короче, и быстрее:

def isSafe(i: Int) = i * i * i
...