Как получить количество процессоров или ядер в Perl. Я хочу это, чтобы решить, создавая число потоков динамически. Ниже я создал 3 потока. Но я хочу создавать потоки, основанные на количестве ядер в этой машине.Число процессоров/ядер в Perl
#!/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 как 'sub & foo {...}'. Это 'sub foo {...}'. (4) '$ fname' может быть' undef'. Вы не учитываете это при печати и выполнении 'csh'. – amon