PerlでCPUまたはコアの数を取得する方法。私はこれを決定し、スレッドの数を動的に作成します。私は3つのスレッドを作成しました。しかし、私はそのマシンのコアの数に基づいてスレッドを作成したいと思います。PerlのCPU /コアの数
#!/usr/bin/perl -w
use threads;
use Thread::Semaphore;
my $semaphore = Thread::Semaphore->new();`enter code here`
my $cur_dir = "D:\\qout";
opendir(CURDIR, "$cur_dir");
my @file_list : shared = readdir(CURDIR);
closedir(CURDIR);
$thr1 = threads->create(\&changemode, \@file_list, "th1");
$thr2 = threads->create(\&changemode, \@file_list, "th2");
$thr3 = threads->create(\&changemode, \@file_list, "th3");
sub &changemode {
my ($file_list) = shift;
my ($message) = shift;
my ($i) = shift;
while (@{$file_list}) {
my $fname;
$semaphore->down();
if (@{$file_list}) {
$fname = shift(@{$file_list});
}
$semaphore->up();
print("$message got access of $fname\n");
system ("csh -fc \"chmod +w $fname\"");
#sleep (2);
}
}
$thr1->join();
$thr2->join();
$thr3->join();
脇に:(1)*常に*厳密に使用する;警告を使う; '。 'warnings'モジュールは' -w'スイッチよりも優れています。 (2)セマフォで配列を保護するのではなく、 'Thread :: Queue'を使います。 (3) 'sub&foo {...}'のようなサブを宣言することはできません。これは 'sub foo {...}'です。 (4) '$ fname'は' undef'です。これを印刷して 'csh'を実行するときは、これを考慮しません。 – amon