ruby多线程同步

# 有两个线程。一个线程从文件中读取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)