title
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
AV | Car | Game | Internet | IT | Linux | Movie | other | PC | RC | Reading | SmartPhone | Web


2012-01-17 結局

_ 並列処理の難しさよ・・・・・

単純なプログラムなのだが、ややこしいのな.

結局、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();

としておく.

世の中のプログラム、並列化しないのはやはり仕方無いか・・・・・



Links
  • Smoug Mail
    無料/有料 の、メールアドレス発行サービス。
    スパムフィルタ、アンチウィルス標準搭載!
«前の日記(2012-01-16) 最新 次の日記(2012-01-18)»