Как функции изменяются во время выполнения, а затем распространяются на несколько потоков?

С помощью Clojure (и других диалектов Лиспа) вы можете модифицировать работающий код. Итак, когда функция изменяется во время выполнения, доступно ли это изменение для нескольких потоков?

Я пытаюсь понять, как технически это работает в параллельных условиях: если несколько потоков используют функцию foo, что происходит, когда я переопределяю (скажем, используя defn) функция foo?

Должна быть какая-то синхронизация: когда и как такая синхронизация происходит и сколько это стоит?

Скажем, в JVM функция ссылается на volatileссылку? Если да, значит ли это, что каждый раз, когда происходит «поиск функции», нужно платить volatileстоимость?

6
задан octopusgrabbus 28 June 2012 в 10:28
поделиться