# 有两个线程。一个线程从文件中读取5行数据到一个队列,然后等待另一个线程
# 从队列中取数据,队列中数据取完后,继续从文件中读取数据到队列。
require 'monitor'
# 要读取的文件
filename = ARGV[0]
total = 0
# 存放数据的队列
q = Queue.new
# 读取文件的线程
a = Thread.new do
puts "读取文件的线程启动"
File.open(filename, 'r') do |file|
i = 0
file.each_line do |line|
q << line
i += 1
total += 1
if total >= 25
puts "退出读取文件的线程"
Thread.exit
end
if i >= 5
i = 0
puts "阻塞读取文件的线程"
Thread.pass
end
end
end
end
# 输出队列数据的线程
b = Thread.new do
puts "输出队列数据的线程启动"
loop do
while q.size == 0
Thread.pass
end
while q.size > 0
puts q.pop
#sleep(0.5)
end
if total >= 25
puts "退出输出队列数据的线程"
Thread.exit
end
end
end
a.join
b.join
ruby多线程同步
最新推荐文章于 2025-09-07 23:26:06 发布