我尝试创建许多线程并将结果返回到一个数据结构中,我读到 Queue
是线程安全的,但是当我运行代码时它没有产生预期的结果。
require 'thread'
class ThreadsTest
queue = Queue.new
threads = []
for i in 1..10
threads << Thread.new do
queue << i
end
end
threads.each { |t| t.join }
for i in 1..10
puts queue.pop()
end
end
代码输出结果为:(总是稍有不同)
4
4
4
4
10
10
10
10
10
10
我期望看到1到10的数字。
我尝试手动同步
,但没有成功:
mutex = Mutex.new
for i in 1..10
threads << Thread.new do
mutex.synchronize do
queue << i
end
end
end
我错过了什么?