Cách lấy số CPU hoặc Lõi trong Perl. Tôi muốn điều này, để quyết định, tạo ra số lượng các chủ đề động. Dưới đây tôi đã tạo 3 chủ đề. Nhưng tôi muốn tạo chủ đề dựa trên số lõi trong máy đó.Số CPU/Lõi trong 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();
Là một sang một bên: (1) * Luôn luôn * 'sử dụng nghiêm ngặt; sử dụng cảnh báo; Mô-đun 'cảnh báo' vượt trội hơn công tắc' -w'. (2) Sử dụng một 'Thread :: Queue' thay vì bảo vệ một mảng với một semaphore. (3) Bạn không thể khai báo một sub như 'sub & foo {...}'. Đó là 'sub foo {...}'. (4) '$ fname' có thể là' undef'. Bạn không tính đến điều này khi in nó ra và thực thi 'csh'. – amon