in reply to Re^2: Scope of thread variable
in thread Scope of thread variable

So, I should not be worried about clashing of variables with threads?

you said contents may not be used but threads will get their own "our" variable and threads can modify it, right?

I'm gonna await the sucker punch, but ostensibly: No, you shouldn't worry. Yes, threads can safely modify our variables:

A new thread will inherit a copy of any pre-existing global variable, but both it, and any other threads, may safely modify their copies of that variable without conflict. This may convince you.

#! perl -slw use strict; use threads; my $tid = threads->tid; our $fred = 12345; print "$tid : $fred"; my $t = threads->create( sub{ my $tid = threads->tid; our $fred; print "$tid : $fred"; $fred = 54321; print "$tid : $fred"; } )->join; print "$tid : $fred"; $fred = 'fred'; print "$tid : $fred"; __END__ C:\test>junk 0 : 12345 1 : 12345 1 : 54321 0 : 12345 0 : fred

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.
"I'd rather go naked than blow up my ass"

Replies are listed 'Best First'.
Re^4: Scope of thread variable
by mr_p (Scribe) on Apr 07, 2010 at 19:38 UTC
    Thanks for your help again.

    I just wanted to confirm before I put anything into production.

Re^4: Scope of thread variable
by mr_p (Scribe) on Apr 08, 2010 at 15:37 UTC
    Can you tell me how to use eval on this code?

    Or

    How can I restart thread a thread if it died with same thread Id?

    # some code here.... for (0 ..3)) { my $thr = threads->create ( sub { worker(); } )->detach(); } # Master Thread while (1) { master(); }
      Can you tell me how to use eval on this code?

      To achieve what?

      How can I restart thread a thread if it died with same thread Id?

      You cannot. Thread ids are allocated by the system and are not re-used.

      If you need a number within your threads that you assign, just pass it in as a parameter:

      for my number (0 ..3)) { my $thr = threads->create ( sub { my $numberPassedIn = shift; worker(); }, $number )->detach(); }

      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.
        How does the master thread know if worker threads are alive and well?