Ruby线程和变量

meso_2600

为什么结果不是从1到10,而是只有10s?

require 'thread'

def run(i)
  puts i
end

while true
  for i in 0..10
    Thread.new{ run(i)}
  end
  sleep(100)
end

结果:

10
10
10
10
10
10
10
10
10
10
10

为什么循环?我正在运行while循环,因为稍后我想一直遍历数据库表并回显从数据库中检索到的所有记录。

马特

传递给的块Thread.new实际上可能在将来的某个时刻开始,到那时,的值i可能已更改。在您的情况下,它们都已10增加到所有线程实际运行之前。

要解决此问题,Thread.new除了块之外,还可以使用接受参数的形式

require 'thread'

def run(i)
  puts i
end

while true
  for i in 0..10
    Thread.new(i) { |j| run(j) }
  end
  sleep(100)
end

这会将块变量设置为调用j的值inew

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

线程和isExecuting变量

来自分类Dev

监视Ruby中的线程变量

来自分类Dev

Ruby MRI中的线程安全实例变量

来自分类Dev

Ruby-线程和Dir []数组

来自分类Dev

了解Ruby变量和符号?

来自分类Dev

Ruby实例方法和变量

来自分类Dev

实例方法和实例变量的线程安全

来自分类Dev

静态变量和多线程

来自分类Dev

线程,任务和变量的正确方法

来自分类Dev

线程读取和写入相同的变量

来自分类Dev

变量和多线程的怪异问题

来自分类Dev

动态变量和线程/睡眠

来自分类Dev

在主线程和线程之间共享变量

来自分类Dev

Ruby为什么类实例变量是线程安全的

来自分类Dev

Ruby动态创建方法和变量

来自分类Dev

Ruby的局部变量和方法

来自分类Dev

在Ruby中设置和访问变量

来自分类Dev

Ruby临时变量的分配和修改

来自分类Dev

Ruby:发现对象中的常量和变量

来自分类Dev

多线程共享计数器和列表集合变量

来自分类Dev

通过不同的线程同时读取和更改变量

来自分类Dev

LD_PRELOAD和线程局部变量

来自分类Dev

使用变量的C#中的等待和线程安全

来自分类Dev

在线程中获取和设置Flag变量

来自分类Dev

如何查看当前线程堆和变量?

来自分类Dev

多线程共享计数器和列表集合变量

来自分类Dev

多线程编程和增加静态变量

来自分类Dev

通过两个不同的线程设置和访问变量

来自分类Dev

条件变量和互斥锁的线程池(大概)锁定问题