这是线程安全的吗?如果没有,有关如何制作一个的任何建议吗?

时间:2013-11-05 16:06:24

标签: scala thread-safety

这是一个求和函数,基本上它包含一个函数,并将它从任何a加到任何b

代码:

object sum {
  def sum(f: Double => Double, lower: Int, upper: Int): Double = {
    @tailrec
    def iter(acc: Double, lower: Int): Double = {
      if (lower > upper) acc
      else iter(acc + f(lower), lower + 1)
    }
    iter(0, lower)
  }

这有多少线程安全?
如果不是,有人可以提供如何制作的信息吗?

1 个答案:

答案 0 :(得分:3)

只要f是引用透明的,也就是说,它没有副作用,它完全是线程安全的。

修改

您应该使用这样的代码或任何条件循环来询问的真正问题是"是否可以始终达到终止条件?"可以保证f(lower) + acc生成的序列能够满足lower > upper吗?例如,如果我要为upper提供单调增加的函数,该函数小于lower,则永远不会终止。循环将是无限的。