in reply to Threads: How to share a FileHandle to Write
If you want to share a filehandle with all threads, there is no need to pass it to each thread individually. Just open it before you spawn your threads and they will inherit a cloned copy of it. Ie. This runs without errors:
#!/opt/coolstack/bin/perl -w use strict; use threads; use threads::shared; use FileHandle; my $nthreads = 64; my $x : shared; # For sync my $fh = FileHandle->new("> out.txt"); my @thrs; for(1..$nthreads){ print "START $_ \n"; my ($thr) = threads->create(\&worker, $_); push @thrs ,$thr; } $_->join for @thrs; print "STOP: " . localtime() . "\n"; $fh->close; print `wc -l out.txt`; exit; #---------------------------------------------------- sub worker{ my $id = shift; my $tmp; for(1..1000){ lock $x; print $fh "bla blalbla bla blal bla bla bla bla\n" ; #NOT SHARED!! +!! } print "$id>LOAD EXIT\n"; }
And produces:
c:\test>junk4 START 1 START 2 1>LOAD EXIT START 3 2>LOAD EXIT START 4 3>LOAD EXIT ... START 60 59>LOAD EXIT START 61 60>LOAD EXIT START 62 61>LOAD EXIT START 63 62>LOAD EXIT START 64 63>LOAD EXIT 64>LOAD EXIT STOP: Tue May 19 11:37:09 2009 64000 out.txt
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Threads: How to share a FileHandle to Write
by gulden (Monk) on May 19, 2009 at 10:56 UTC | |
by BrowserUk (Patriarch) on May 19, 2009 at 11:22 UTC | |
by gulden (Monk) on May 19, 2009 at 14:45 UTC | |
by BrowserUk (Patriarch) on May 19, 2009 at 15:28 UTC | |
by gulden (Monk) on May 19, 2009 at 17:06 UTC | |
|