Это зависит от реализации. Имейте в виду, что x ||= y
расширяется до x || x = y
, и что x = y
выполняется только в том случае, если x
равно false
или nil
.
С учетом вышесказанного, реализация языка Ruby на C должна быть полностью поточно-ориентированной.
YARV использует собственные потоки для реализации параллелизма, который do выполняется в истинной параллели. Однако для обеспечения обратной совместимости была введена глобальная блокировка для всего интерпретатора .
JRuby, однако, не налагает внутренней блокировки на ваш код, поэтому вы должны вручную синхронизировать ваши вызовы при необходимости.
См. другой ответ, который я дал по теме для получения более подробной информации. Кроме того, прочитайте этот превосходный ответ от Jörg W Mittag для более глубокого взгляда на модели потоков различных реализаций Ruby.