小编MRe*_*ezk的帖子

不是 ruby​​ 队列线程安全为什么队列不同步?

我试图创建许多线程并在数据结构中返回结果,我读到它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)

我错过了什么?

ruby multithreading thread-safety

3
推荐指数
1
解决办法
715
查看次数

标签 统计

multithreading ×1

ruby ×1

thread-safety ×1