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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值