小编ran*_*oke的帖子

用MRI产生竞争条件

我想知道使用MRI ruby​​(2.0.0)和一些全局变量来制作竞争条件是否容易,但事实证明它并不那么容易.看起来它应该在某些时候失败,但它没有,我已经运行了10分钟.这是我一直试图实现的代码:

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
Run Code Online (Sandbox Code Playgroud)

为什么我无法生成(或检测)预期的竞争条件,并woo hoo!在Ruby MRI 2.0.0中获得输出?

ruby multithreading race-condition

6
推荐指数
1
解决办法
249
查看次数

标签 统计

multithreading ×1

race-condition ×1

ruby ×1