Estoy tratando de tomar un programa Perl que escribí y enhebrarlo. El problema es que leí que algunos módulos no son "seguros para subprocesos". ¿Cómo puedo saber si un módulo es seguro para subprocesos? He buscado una lista y no puedo encontrar una.Perl Thread Safe Modules
para probar un módulo de uso frecuente (Texto :: CSV_XS) He probado el siguiente código a cabo:
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
La salida de recibo es la siguiente:
Hello thread number: 1 Segmentation fault
¿Significa esto el módulo no es seguro para subprocesos o es otro problema?
Gracias
tratar de llegar con el programa más pequeño que puede que provoca el fallo de segmentación. – mob