我有这个代码:
require 'pp'
$pool = []
def work arg
$pool.push($$)
sleep (1 + rand(5))
$pool.delete($$)
exit
end
ary = []
100.times { |x| ary.push(x) }
while ary.any? do
while $pool.size < 10 && ary.any?
arg = ary.pop
Process.detach( fork { work(arg) } )
pp $pool.size
sleep 0.01
end
end
对我来说,当我在第二个 while< 的
始终循环work()
pp $pool.size
中填充 $pool
时,这是意外的0
我哪里错了?
最佳答案
当您使用 fork 创建新进程时,新进程会获取(空)$pool 的副本。执行循环的父进程中的 $pool 永远不会填充任何内容(对工作函数的调用在子进程中执行),因此它的大小始终为 0。
关于ruby - 意外的 ruby 全局数组变量行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7498387/