从外面停止一个线程

我有一个线程在后台做事情,我想在我的程序有真实的事情时暂停它。 一旦完成,我希望后台线程继续。 例如

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自行停止,但是我找不到从“外部”停止线程的方法。 有简单的解决方案吗?

你需要的是一个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...