Сопоставление шаблонов Scala в параллельной программе

Я новичок в Scala, и я хочу написать многопоточный код -с сопоставлением с образцом, и мне было интересно, могу ли я рассматривать код сопоставления с образцом -как атомарный.

Например:

abstract class MyPoint
case class OneDim(x : Int) extends MyPoint
case class TwoDim(x : Int, y : Int) extends MyPoint

var global_point : MyPoint = new OneDim(7)

spawn {
    Thread.sleep(scala.util.Random.nextInt(100))
    global_point = new TwoDim(3, 9)
}
Thread.sleep(scala.util.Random.nextInt(100))

match global_point {
    case TwoDim(_, _) => println("Two Dim")
    case OneDim(_) => println("One Dim")
}

Возможно ли, что выполнение будет проходить следующим образом:

  1. Основной поток достигает кода "совпадения с глобальной _точкой", обнаруживает, что *глобальная _точка *не относится к типу TwoDim и приостанавливает (возврат к планировщику ).
  2. Созданный поток изменяет *глобальную _точку *на тип TwoDim
  3. . Основной поток возвращается, обнаруживает, что *глобальная _точка *не относится к типу OneDim , считает, что нет совпадений с *глобальной _точкой *и вызывает исключение NoMatch.

Избегает ли Scala внутренне такое выполнение? Если да, то как? Сопоставление делает снимок объекта, а затем пытается сопоставить его с шаблонами? Существует ли ограничение на глубину снимка (, шаблоны совпадений могут быть сложными и вложенными )?

5
задан Jonathan Leffler 8 September 2015 в 20:14
поделиться