gpt4 book ai didi

multithreading - 如何在不立即运行的情况下创建线程?

转载 作者:行者123 更新时间:2023-12-03 13:17:48 28 4
gpt4 key购买 nike

考虑以下代码:

for (my $i = 0; $i < $threadCount; $i++) {

if($isResumed) {

# TODO: load stats from DB
}
else {

$stats->{workers}->{$i} = &share({});
$stats->{workers}->{$i}->{tid} = undef;
$stats->{workers}->{$i}->{foo} = "bar";
$stats->{workers}->{$i}->{abc} = 123;
}

# create the worker thread
my $thr = threads->create(\&worker);
# TODO: find a way to store the TID in the $i slot. why have two differetn IDs?
$stats->{workers}->{$i}->{tid} = $thr->tid();
}

我正在使用$ stats散列来保存应该在线程之间共享的数据,以及有关每个线程在做什么的数据。我遇到的问题是,我想基于TID而不是$ i在循环中分配的任意值来引用此哈希中的线程数据。

当我创建线程时,工作将立即开始,但是直到设置了哈希值后,它才能开始工作。所以,如果我这样做:
$thr = threads->create(\&worker);
$stats->{workers}->{$thr->tid()} = &share({});

由于尚未设置所需的所有数据,因此无法使用。

因此,基本上,有一种方法可以让我创建一个线程,但将其推迟运行代码,直到我明确告知为止。就像是:
$thr = threads->create(\&worker);
$stats->{workers}->{$thr->tid()} = &share({});
$thr->start();

最佳答案

强烈建议对此类内容使用Thread::Queue

关于multithreading - 如何在不立即运行的情况下创建线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12845498/

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