トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

fork()による疑似マルチスレッド

[Perl]

fork()による疑似マルチスレッド

Perlでマルチスレッドプログラムを作成するには、ithreadsを使う方法もあるが、スレッド間通信の必要が無い場合にはより多くの環境で利用可能なfork()を用いて疑似マルチスレッド(マルチプロセス)プログラムを作成することも可能である。スレッド(プロセス)間での通信を要する場合には通常のithreadsを使うか、fork()でthreadをエミュレートするforksを用いるか、一時ファイル・パイプ・ソケットを介したやりとりをするように実装するとよいでしょう。IPC::なんとかというモジュールも各種ありますのでCPANで検索してみるとよいでしょう。個人的にはIPC::Liteなんかがシンプルでよさげに思います。

コード例

use strict;
$| = 1;
my $numthreads = 2;

{
	my $child = 0;
	$? = 0;
	for (my $i = 0; $i < 100; $i ++) {
		if (my $pid = fork()) {
			$child ++;
			if ($child == $numthreads) {
				if (wait == -1) {
					$child = 0;
				} else {
					$child --;
				}
			}
			if ($?) {
				&errorMessage(__LINE__);
			}
			next;
		}
		else {
			print($i + 1 . "\n");
			exit(0);
		}
	}
}

# join
while (wait != -1) {
	if ($?) {
		&errorMessage(__LINE__);
	}
}

最終更新時間:2009年07月06日 21時28分38秒