次のコードを検討してください。
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 ハッシュを使用して、スレッド間で共有する必要があるデータと、各スレッドの実行内容に関するデータを保持しています。私が抱えている問題は、ループ内で $i によって割り当てられた任意の値ではなく、TID に基づいてこのハッシュのスレッド データを参照したいということです。
スレッドを作成するとすぐに作業が開始されますが、ハッシュ値が設定されるまで作業を開始できません。だから、もしそうなら:
$thr = threads->create(\&worker);
$stats->{workers}->{$thr->tid()} = &share({});
必要なすべてのデータがまだ設定されていないため、機能しません。
基本的に、スレッドを作成する方法はありますが、具体的に指示するまでコードの実行を延期しますか? 何かのようなもの:
$thr = threads->create(\&worker);
$stats->{workers}->{$thr->tid()} = &share({});
$thr->start();