| 前 | 2012年 1月 |
次 | ||||
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 | ||||
単純なプログラムなのだが、ややこしいのな.
結局、semaphore も使わないとダメになった.
use threads;
use Thread::Semaphore;
use constant { THREAD_LIMIT=>5 };
our $SEMA = new Thread::Semaphore(THREAD_LIMIT);
な感じで、事前に制限値(今回は 5)を設定しておく.
でもって thread を格納.
$thread = thread->create(\&[処理名] , 引数 , $SEMA); push(@threads , $thread);
と、事前に全て格納し終えてから一気に実行
foreach(@threads) {
my ($return) = $_->join;
}
ここで実行先([処理名])のルーチン内で
$sema->down(); ==== 処理 ==== $sema->up();
としておく.
世の中のプログラム、並列化しないのはやはり仕方無いか・・・・・