詳細はthreads::sharedを参照。思うことがあるだろう。ことを確認したいと思うかもしれない。明け渡せたらなあということがよくある。this:Perlのスレッドパッケージはこれを実現するyield()関数を提供している。platform.yield()はCPUを明け渡すためのヒントでしかない。ハードウェアやOS、そしてスレッドライブラリに依存している。多くのオペレーティングシステムにおいて、yield()は何も機能しない。プラットフォームでは動かないかもしれないのだ。else.Perlのスレッドパッケージの働き部分をみてきた。やり方でスレッドコードとパッケージを書いていくことができるはずだ。実際にはフィットしないが、便利な小物も少しはある。すオブジェクトを得ることができる。オブジェクトと同じように、このオブジェクトを使うことができる。created.tid()はオブジェクトが表すスレッドのIDを返すメソッドだ。プログラム中のメインスレッドは0である。全てのスレッドに一意なIDをつける。新しいスレッドが作られる度にIDは1ずつ増えていく。同じスレッドを示していれば真を、そうでなければ偽を返す。オブジェクトのようにそれらを比較することもできる。program:threads->listはスレッドオブジェクトのリストを返す。detachされていないスレッドである。クリーンナップするのも含めていろいろな点で便利だ。自分自身をクリーンナップすることができないためだ。このプログラムはスレッドを使って素数を見つけだす。pipeline.このプログラムは素数を発生させるためにパイプラインモデルを利用している。アウトプット・キューとを持つ。子スレッドがない場合、そのスレッドは新しい素数を見つけたことになる。1)これは実際よりもわかりにくいかもしれない。なにをやっているのかみてみよう。自分自身と1でのみ割り切れる数のことだ。21).作業の大半はcheck_num()ルーチンによってなされる。インプット・キューへのリファレンスとスレッドが受け持つ素数を引数にとる。入れた後(20行目)、新しいキューを生成する(22行目)。後で生成するかもしれないスレッドを入れるスカラー変数を用意する(21行目)。取り出し、このスレッドが受け持つ素数でチェックする。される数に対する法を行い、余りがあるかどうかを調べる。素数では割れないということだ。次のスレッドに渡すし、そうでなければ新しいスレッドをつくる。found.29行目で新しいスレッドの生成を行っている。先につくったキューへのリファレンスと発見された素数を渡す。実行が終了するのを待つ(32,33行目[原文は37])。それからチェックするための3から1000までの数字をキューに入れる(12〜14行目)。キューにdie通知[undef]を入れる(16行目)。終了するのを待つ(17行目)。そのスレッドはdieしないので、joinから戻ってきたら作業が終わったことになる。program.以上が仕組みだ。説明の方が当のプログラム以上にとても長い。threads.オペレーティングシステムの観点からみた、スレッド実装についての背景。カーネルスレッド、そしてマルチプロセッサカーネルスレッドだ。このモデルにおいては、OSはスレッドについて何も関知しない。OSからしてみる限り、あなたのプロセスはただのひとつのプロセスである。