考虑以下代码:
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();