Mae向きなブログ

Mae向きな日記のブログ版。ようやくこちらに移行してきました。

スレッド間で通信する

逆引きRubyは,各項目についてまとめられており非常に有用なサイトです。
スレッドのところを読んだのですが,その中の「スレッドで通信する」とういうところで,以下のようなサンプルがあります。

require "thread"

q = Queue.new

t = Thread.new do
  loop do
    n = q.pop
    if n.to_i>=0
      val = Math::sqrt(n)
      puts "Square(#{n}) = #{val}"
    else
      puts "?"
    end
  end
end

while line = gets
  if line.chop! == "."
    break
  else
    q.push(line)
  end
end

標準入力から数値を入力する前に,n = q.popはどんな動作をするんだろうと疑問を持ったのですが,Rubyリファレンスマニュアルによると

スレッドが空のqueueを読み出そうとすると停止します。queueになんらかの情報が書き込まれると実行は再開されます。

とありました。疑問解決です。