gpt4 book ai didi

multithreading - Perl线程与对象析构函数

转载 作者:行者123 更新时间:2023-12-03 12:52:37 26 4
gpt4 key购买 nike

运行此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不这样做吗?

最佳答案

您可能需要将其放入Foo包中:

sub CLONE_SKIP { 1 }

(假设您不是在使用古老的Perl)。

但是,当您开始尝试让perl在创建新线程时复制所有代码和数据时,您所进入的领域是没有线程可能会更好。您必须说出您正在使用线程做什么,以便在这一点上获得良好的建议。

关于multithreading - Perl线程与对象析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17225514/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com