我正在嘗試編寫一個Perl程序並將其寫入線程。問題是我讀過一些模塊不是「線程安全」的。我怎麼知道一個模塊是否線程安全?我查了一下列表,找不到一個。Perl線程安全模塊
爲了測試一個模塊,我經常使用(文字:: CSV_XS)我嘗試下面的代碼了:
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
我收到的輸出如下:
Hello thread number: 1 Segmentation fault
這是否意味着該模塊不是線程安全的,還是另一個問題?
感謝
嘗試拿出可以引起分段錯誤最小的方案。 – mob 2010-07-20 04:47:21