現在根據我在Perl ithreads下的理解,除非明確共享,否則所有數據都是私有的。如何在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上。
@Zaid:作爲一般規則,我通常只在24小時後接受答案。有一些耐心:-) – 2010-02-23 18:26:44