スレッド間共有変数

perlスレッド間共有変数

use strict;
use warnings;
use threads;
use threads::shared;
use Time::HiRes;

#文字コード
use utf8;
binmode STDIN, ":utf8";
binmode STDOUT, ":utf8";

#-------------------------------------------------------------------------------
print("thread test\n");

#スレッド間共有変数
my $counter :shared = 0;

#スレッド開始
my @t_array = ();
foreach(1..5){
	my $t = threads->create(\&sub_func, $_);
	push(@t_array, $t);
}

#スレッド終了待ち
foreach (@t_array){
	$_->join();
}

print "done.\n";

#----メソッド
sub sub_func {
	my($val) = @_;
	print("thread $val: -------------------------------------- start\n");
	
	my $r = rand(3) + 1;
	for(my $i = 0; $i < $r; $i++){
		$counter++;
		print("thread $val exe:$i:$counter\n");
		threads->yield();
		Time::HiRes::sleep(0.001);
	}

	print("thread $val: ----------------------------------------end\n");
}