1
多くのスレッドを作成して結果をデータ構造体に戻そうとしていますが、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
コード印刷:(常に少し異なる)私は10
を通じて番号1を期待していた
4
4
4
4
10
10
10
10
10
10
私は手動で無駄にsynchronize
しようとしていた:
mutex = Mutex.new
for i in 1..10
threads << Thread.new do
mutex.synchronize do
queue << i
end
end
end
私には何が欠けていますか?
ところで、それは右の 'class'ブロックにそのようなコードを入れて奇妙です。それをメソッドでラップする必要があります。 – Stefan