Tôi đang cố gắng để có một chương trình Perl tôi đã viết và thread nó. Vấn đề là tôi đọc rằng một số mô-đun không phải là "thread an toàn". Làm cách nào để biết liệu mô-đun có phải là chủ đề an toàn không? Tôi đã xem xét một danh sách và không thể xác định được danh sách.Perl Chủ đề Mô-đun an toàn
Để kiểm tra ra một mô-đun tôi sử dụng thường xuyên (Text :: CSV_XS) Tôi đã thử các mã sau ra:
use strict;
use warnings;
use threads;
use threads::shared;
require Text::CSV_XS;
my $CSV = Text::CSV_XS->new ({ binary => 1, eol => "\n" }) or die("Cannot use CSV: ".Text::CSV->error_diag());
open my $OUTPUT , ">:encoding(utf8)", "test.csv" or die("test.csv: $!");
share($CSV);
my $thr1 = threads->create(\&sayHello('1'));
my $thr2 = threads->create(\&sayHello('2'));
my $thr3 = threads->create(\&sayHello('3'));
sub sayHello
{
my($num) = @_;
print("Hello thread number: $num\n");
my @row = ($num);
lock($CSV);{
$CSV->print($OUTPUT, \@row);
$OUTPUT->autoflush(1);
}#lock
}#sayHello
Kết quả tôi nhận được là như sau:
Hello thread number: 1 Segmentation fault
Liệu này có nghĩa là các mô-đun không phải là chủ đề an toàn, hoặc nó là một vấn đề khác?
Cảm ơn
Cố gắng đưa ra những chương trình nhỏ nhất bạn có thể là nguyên nhân gây lỗi segmentation. – mob