philou has asked for the wisdom of the Perl Monks concerning the following question:
Hi all,
I've got a bit of trouble with perl threads. What I'm trying to do is to share a Thread::Semaphore object among multiple threads ( actually I would like to embed a Thread::Semaphore within an object ). The straigthforwad approach does not work :
That is, each time I press the `Enter' key, I would expect a "DOWN!" to show up on my terminal ( if the semaphore was shared ), but nothing happens.#!/home/philou/install/perl-5.8.2-threads/bin/perl -w use strict; use threads; use threads::shared; use Thread::Semaphore; my $s = 'Thread::Semaphore'->new( 1 ); sub t { while( $s->down() ) { print "DOWN!\n"; sleep( 1 ); } } 'threads'->new( \&t ); while( <> ) { $s->up(); print "UP!\n"; }
Declaring the `$s' variable as `shared' does not help at all :
When excuting the previous piece of code, it seems that the sharedness of `$s' prevents it from being a blessed object, and I end up with :#!/home/philou/install/perl-5.8.2-threads/bin/perl -w use strict; use threads; use threads::shared; use Thread::Semaphore; my $s : shared = 'Thread::Semaphore'->new( 1 ); sub t { while( $s->down() ) { print "DOWN!\n"; sleep( 1 ); } } 'threads'->new( \&t ); while( <> ) { $s->up(); print "UP!\n"; }
So my question is: How do you share Thread::Semaphore among perl threads ?thread failed to start: Can't call method "down" on unblessed referenc +e at ./t.pl line 11.
Any suggestion appreciated.
Philou
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Sharing a Thread::Semaphore among threads
by Roger (Parson) on Sep 29, 2004 at 11:54 UTC | |
Re: Sharing a Thread::Semaphore among threads
by BrowserUk (Patriarch) on Sep 29, 2004 at 14:07 UTC |
Back to
Seekers of Perl Wisdom