in reply to Re^10: [threads] Open a file in one thread and allow others to write to it
in thread [threads] Open a file in one thread and allow others to write to it
Hum, "buffered IO" and "buffer-fulls"
Remember what I was saying about buffering?
Your modification of my code, mildy modified:
#! perl -slw use strict; use Time::HiRes qw[ time sleep ]; use threads; use threads::shared; our $THREADS ||= 4; my $sem :shared; open LOG, '>', 'log.txt' or die $!; my $old = select LOG; $|++; select $old; sub logit { lock $sem; return printf LOG @_; } sub thread { my $tid = threads->self->tid; my $stop = shift; warn $tid, ": starting:", time(), " Stoptime: $stop\n"; while( time() < $stop ) { logit "%2d: The time is %f\n", $tid, time; } warn $tid, ": stopping at ", time(), "\n"; } my @threads = map threads->create( \&thread, time() + int( rand 10 ) ), 1 .. $THREADS; warn "threads started; waiting\n"; $_->join for @threads; warn "threads done\n";
When I run that under *nix:
mehere@mehere-desktop:~/perl$ perl -v This is perl, v5.10.0 built for x86_64-linux-gnu-thread-multi ... mehere@mehere-desktop:~/perl$ wc -l log.txt 173746 log.txt
It created a 173000 line file that is flawless!
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
| A reply falls below the community's threshold of quality. You may see it by logging in. |