Запуск этой программы PERL:Perl нити против объекта деструкторов
use strict;
use warnings;
use threads;
my $foo = Foo->new();
my $t = threads->create(sub { print "in thread\n" });
$t->join();
package Foo;
sub new
{
print "Foo->new\n";
return bless {}, 'Foo';
}
sub DESTROY
{
print "Foo->DESTROY\n";
}
1;
Производит этот вывод:
Foo->new
in thread
Foo->DESTROY
Foo->DESTROY
Я думаю, что это происходит потому, что Perl делает копию $ обув в новом потоке а затем вызов деструктора при выходе нового потока и выходе основного потока. Мне это кажется плохим поведением. Это дает мне головные боли в моей гораздо более сложной, актуальной программе. Есть ли способ заставить Perl не делать этого?
Похоже, что это по дизайну: http://www.gossamer-threads.com/lists/perl/porters/269726?do=post_view_threaded#269726 – Pragmateek
Зачем вам нужно использовать потоки? – ysth