運行這個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在新線程使$ foo的副本然後在新線程退出時以及主線程退出時調用析構函數。這對我來說似乎是不好的行爲。它讓我在更復雜的實際項目中頭痛不已。有沒有辦法讓Perl不這樣做?
看起來像它的設計:http://www.gossamer-threads.com/lists/perl/porters/269726?do=post_view_threaded#269726 – Pragmateek
爲什麼你需要使用線程? – ysth