Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

Re^5: [threads] Open a file in one thread and allow others to write to it

by BrowserUk (Pope)
on Nov 16, 2009 at 13:23 UTC ( #807448=note: print w/replies, xml ) Need Help??


in reply to Re^4: [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

you are assuming that OS will sync the File->writes without any race conditions problems,

Um. No. That's why I used a shared variable to coordinate

my $sem :shared; open LOG, '>', 'log.txt' or die $!; sub logit { lock $sem; return printf LOG @_; }

Perhaps you could just try running the code I posted where you are, and tell me what problems you see?


Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
  • Comment on Re^5: [threads] Open a file in one thread and allow others to write to it
  • Download Code

Replies are listed 'Best First'.
Re^6: [threads] Open a file in one thread and allow others to write to it
by gulden (Monk) on Nov 16, 2009 at 13:37 UTC

    «That's why I used a shared variable to coordinate »

    Your lock variable coordinates the concurrency between Perl Threads, it won't sync the OS File->writes, cos each Thread is using a cloned FileHandled and you are trusting OS Synchronization.

    Now I make you a question? Why are you using a lock variable, since you are using a cloned FileHandle that is not shared between threads? You are trusting the OS sync, so the use of that shared LOCK variable is useless.It only minimizes OS->File->Writes thread concurrency

    «A contentious debate is always associated with a lack of valid arguments.»
      Why are you using a lock variable,

      Because in the past I have (frequently) seen the situation where separate threads writing to the same file concurrently through buffered IO, would flush buffer-fulls, not lines, and so result in fragmentary interleaving.

      And in the absence of anyone with demonstrably authoratative knowledge prepared to answer such questions, I go by the empirical eveidence of what actually happens when I do things.


      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      "Science is about questioning the status quo. Questioning authority".
      In the absence of evidence, opinion is indistinguishable from prejudice.

        Hum, "buffered IO" and "buffer-fulls", maybe there is the problem, but won't be your Perl LOCKED variables that would solve your bogus code.

        «A contentious debate is always associated with a lack of valid arguments.»

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://807448]
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (5)
As of 2018-07-16 09:15 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    It has been suggested to rename Perl 6 in order to boost its marketing potential. Which name would you prefer?















    Results (333 votes). Check out past polls.

    Notices?