Generando una condición de carrera con MRI

Me preguntaba si es fácil hacer una condición de carrera usando MRI ruby ​​(2.0.0) y algunas variables globales, pero resulta que no es tan fácil. Parece que debería fallar en algún momento, pero no lo hace y lo he estado ejecutando durante 10 minutos. Este es el código que he estado tratando de lograrlo:

def inc(*)
  a  = $x
  a +=  1
  a *= 3000
  a /= 3000
  $x =  a
end

THREADS = 10
COUNT   = 5000

loop do
  $x = 1
  THREADS.times.map do Thread.new { COUNT.times(&method(:inc)) } end.each(&:join)

  break puts "woo hoo!" if $x != THREADS * COUNT + 1
end

puts $x

¿Por qué no puedo generar (o detectar) la condición de carrera esperada y obtener la salida?woo hoo! en Ruby MRI 2.0.0?

Respuestas a la pregunta(1)

Su respuesta a la pregunta