Теперь из того, что я понимаю под Perl, он считывает, что все данные являются частными, если они не переданы явно.
Я хочу написать функцию, которая будет хранить данные о состоянии потока между вызовами. Я предполагаю, что побочный эффект всех данных, являющихся частными по умолчанию, позволил бы мне использовать замыкание, подобное этому:
#!/usr/bin/perl -w
use strict;
use threads;
{ # closure to create local static variable
my $per_thread_state = 0;
sub foo {
my $inc = shift;
$per_thread_state += $inc;
return $per_thread_state;
}
}
my $inc = 0;
threads->create(
sub {
my $inc = shift;
my $i = $inc;
while (--$i) {
threads->yield();
print threads->tid().":".foo($inc)."\n";
}
}, $inc
) while (++$inc < $ARGV[0]);
$_->join() foreach threads->list();
Когда я запускаю его, это выглядит так, как будто он работает так, как я ожидал, но я просто хочу быть уверен, потому что я не смог найти документацию, в которой явно говорится, что-то подобное.
Может ли кто-нибудь указать мне на что-то официальное?
Редактировать
Еще одна вещь, которая кажется странной, это то, что потоки всегда работают в порядке создания и по какой-то причине не чередуются. Например, если я бегу:
./tsd.pl 100
Все распечатывается идеально по порядку. Я нахожусь на Ubuntu 9.04, если это имеет значение.