Thread
ライブラリによってRubyによる並行プログラミングが可能に
なります.スレッドはメモリ空間を共有して同時に実行される制御の
流れです.Rubyインタプリタは時分割でスレッドを実行しますので,
スレッドを使うことで実行速度が速くなることはありません.
プログラムの開始と同時に生成されるスレッドをmain threadと呼び ます.なんらかの理由でmain threadが終了する時には,他の全て のスレッドもプログラム全体も終了します.ユーザからの割込みによっ て発生した例外はmain threadに送られます.
Thread
ライブラリはコンパイル時の設定で外すことの
できるオプションです.インタプリタによってはスレッドの使えない
場合があります.
Thread
はユーザレベルでのスレッドを表現するクラス
です.
スレッドの起動時に指定したブロックの実行が終了するとスレッド の実行も終了します.ブロックの終了は正常な終了も例外などによ る異常終了も含みます.
abort_on_exception
いずれかのスレッドが例外によって終了した時に,インタプリタ全 体を中断させるかどうかのフラグの値を返します.
abort_on_exception=(yes_no)
いずれかのスレッドが例外によって終了した時に,インタプリタ全 体を中断させるかどうかのフラグを設定します.通常あるスレッドで起こった例外は, Thread#joinなどで検出されない限り そのスレッドだけをなにも警告を出さずに終了さます.
current
現在実行中のスレッドを返します.
exit
カレントスレッドの実行を終了します.
join thread
threadで指定したスレッドの実行が終了するまで,カ レントスレッドを中断します.
kill thread
指定したスレッドの実行を終了させます.
new {...}
start {...}
fork {...}
スレッドを生成して,ブロックの評価を開始します.生成されたス レッドを返します.
pass
他のスレッドに実行権を譲ります.
stop
他のスレッドからrun
メソッドで再起動されるまで,
カレントスレッドの実行を停止します.
self[name]
nameに対応したスレッドに固有のデータを取り出しま す.nameは文字列かシンボルで指定します.
self[name]=val
valをnameに対応するスレッド固有のデー タとして格納します.nameは文字列かシンボルで指定 します.
abort_on_exception
そのスレッドが例外によって終了した時に,インタプリタ全 体を中断するかどうかのフラグの値を返します.
abort_on_exception=(yes_no)
そのスレッドが例外によって終了した時に,インタプリタ全 体を中断させるかどうかのフラグを設定します.
alive?
status
スレッドが「生きている」時,真を返します.正常終了した時にはfalse
,
例外終了した時にはnil
を返します.
exit
スレッドの実行を終了させます.
join
スレッドの実行が終了するまで,カレントスレッドを中断します.
raise([error_type,][message][,traceback])
そのスレッドで強制的に例外を発生させます.
run
スレッドの実行を再開させます.スレッドが停止していなかった場 合にはなにもしません.
stop?
スレッドが停止している時,真を返します.
value
スレッドが停止するまで待ち,ブロックが返した値を返します.ス レッド実行中に例外が発生した場合には,その例外を再発生させま す.
wakeup
停止中のスレッドが再起動できるようにします.
Mutex(相互排他ロック)は共有データを並行アクセスから保護する
ためにあります.Mutexの典型的な使い方は(mを
Mutex
オブジェクトとします):
または,より簡単にbegin m.lock # mによって保護されたクリティカルセクション ensure m.unlock end
m.synchronize { # mによって保護されたクリティカルセクション }
new
新しいmutexを生成します.
lock
mutexオブジェクトをロックします.一度に一つのス レッドだけがmutexをロックできます.既にロックされているmutex に対してロックを行おうとしたスレッドはmutexのロックが開放さ れるまで,実行が停止されます.
locked?
mutexがロックされている時,真を返します.
synchronize
mutexをロックし,ブロックを実行します.実行後に必ずmutexのロッ クを開放します.
try_lock
mutexをロックしようとして,ロックが成功した場合,真を返しま す.ロックできなかった場合にはブロックせず偽を返します.
unlock
mutexのロックを開放します.mutexのロック待ちになっていたスレッ ドの実行は再開されます.
Queueはスレッド間のFIFO(first in first out)の通信路です.ス レッドが空のqueueを読み出そうとすると停止します.queueになんら かの情報が書き込まれると実行は再開されます.
new
新しいqueueオブジェクトを生成します.
empty?
queueが空の時,真を返します.
length
queueの長さを返します.
pop [non_block]
queueからひとつ値を取り出します.queueが空の時,呼出元のスレッ
ドは停止します.省略可能な引数non_blockがnilでな
い時,pop
はqueueが空の時に例外を発生します.
push value
queueの値を追加します.待っているスレッドがいれば実行を再開 させます.