前 | 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();
としておく.
世の中のプログラム、並列化しないのはやはり仕方無いか・・・・・