我试图创建许多线程并在数据结构中返回结果,我读到它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
Run Code Online (Sandbox Code Playgroud)
代码打印:(总是有点不同)
4
4
4
4
10
10
10
10
10
10
Run Code Online (Sandbox Code Playgroud)
我期待数字 1 到 10。
我synchronize手动尝试过但无济于事:
mutex = Mutex.new
for i in 1..10
threads << Thread.new do
mutex.synchronize do
queue << i
end
end
end
Run Code Online (Sandbox Code Playgroud)
我错过了什么?