src/Pure/Concurrent/par_list.scala
changeset 61590 94ab348eaab2
parent 61562 264c7488d532
child 73367 77ef8bef0593
equal deleted inserted replaced
61589:d07d0d5a572b 61590:94ab348eaab2
    11 object Par_List
    11 object Par_List
    12 {
    12 {
    13   def managed_results[A, B](f: A => B, xs: List[A]): List[Exn.Result[B]] =
    13   def managed_results[A, B](f: A => B, xs: List[A]): List[Exn.Result[B]] =
    14     if (xs.isEmpty || xs.tail.isEmpty) xs.map(x => Exn.capture { f(x) })
    14     if (xs.isEmpty || xs.tail.isEmpty) xs.map(x => Exn.capture { f(x) })
    15     else {
    15     else {
    16       val state = Synchronized((List.empty[Future[B]], false))
    16       val state = Synchronized[(List[Future[B]], Boolean)]((Nil, false))
    17 
    17 
    18       def cancel_other(self: Int = -1): Unit =
    18       def cancel_other(self: Int = -1): Unit =
    19         state.change { case (futures, canceled) =>
    19         state.change { case (futures, canceled) =>
    20           if (!canceled) {
    20           if (!canceled) {
    21             for ((future, i) <- futures.iterator.zipWithIndex if i != self)
    21             for ((future, i) <- futures.iterator.zipWithIndex if i != self)