Jak uzyskać liczbę procesorów lub rdzeni w Perlu. Chcę tego, zdecydować, dynamicznie tworząc liczbę wątków. Poniżej stworzyłem 3 wątki. Ale chcę utworzyć wątki na podstawie liczby rdzeni w tym komputerze.Liczba procesorów/rdzeni w Perlu
#!/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();
Odłóż: (1) * Zawsze * "używaj surowych; używaj ostrzeżeń; '. Moduł 'ostrzeżenia' jest lepszy od przełącznika' -w'. (2) Użyj 'Thread :: Queue' zamiast chronić tablicę semaforem. (3) Nie możesz zadeklarować sub-like 'sub & foo {...} '. To jest 'sub foo {...}'. (4) '$ fname' może być' undef'. Nie rozliczasz się z tego przy drukowaniu i wykonywaniu 'csh'. – amon