我有一个线程在后台做事情,我想在我的程序有真实的事情时暂停它。一旦完成,我希望后台线程继续。 E.g。
ta = Thread.new { loop { print 'a'; sleep 0.2 } }
sleep 0.5
# put ta to sleep
5.times { print 'b'; sleep 0.2 }
# let ta resume
sleep 0.8
puts
输出应该类似于aaabbbbbaaaaa
。目前是aaabababababaaaaa
。
虽然一个线程可以通过Thread.stop
自行停止,但是我找不到从“外部”停止线程的方法。有一个简单的解决方案吗?
答案 0 :(得分:2)
您需要的是Mutex
:
$my_mutex = Mutex.new
t1 = Thread.new do
loop do
$my_mutex.synchronize do
print 'a'
end
sleep 0.2
end
end
sleep 0.5
$my_mutex.synchronize do
5.times do
print 'b'
sleep 0.2
end
end
sleep 0.8
puts
sleep
输出:
aaabbbbbaaaaa
aaaaaaaaaaaaaaaaa...