if ( my $thread = threads->new( \&do_worker ) ) {
my $t = $thread->tid;
lock %{ $stat{'work'} };
$stat{'work'}{ $t } = &share( {} );
$stat{'work'}{ $t }{'stat'} = 'idle';
####
sub do_worker {
my $t = threads->self()->tid();
# sleep(1);
my $c;
LOOP: while ( !$stat{'work'}{$t}{'stat'} ne 'done' ) {
####
sub do_worker {
my $t = threads->self()->tid();
{
lock %{ $stat{'work'} };
$stat{'work'}{ $t } = &share( {} );
$stat{'work'}{ $t }{'stat'} = 'idle';
}
my $c;
LOOP: while ( do{ lock %{ $stat{'work'}{$t} }; $stat{'work'}{$t}{'stat'} } ne 'done' ) {
...
if ( my $thread = threads->new( \&do_worker ) ) {
my $t = $thread->tid;
trc 'dbg', 'new worker created';
$thread->detach;
...
####
LOOP: while ( $stat{'work'}{$t}{'stat'} ne 'done' ) {
{
lock %{ $stat{'lock'} };
$c = $listener->accept() or next LOOP;
}
####
timeout => 10,.
If you remove the ##
lock %{ $stat{'work'} };
...
$stat{'work'}{$t}{'stat'} = $s;
$stat{'work'}{$t}{'time'} = time();
$stat{'work'}{$t}{'work'}++ if $s eq 'idle';
####
lock %{ $stat{'work'}{$t} };
...
$stat{'work'}{$t}{'stat'} = $s;
$stat{'work'}{$t}{'time'} = time();
$stat{'work'}{$t}{'work'}++ if $s eq 'idle';