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 :
#!/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";
}
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.
Declaring the `$s' variable as `shared' does not help at all :
#!/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";
}
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 :
thread failed to start: Can't call method "down" on unblessed referenc
+e at ./t.pl line 11.
So my question is: How do you share Thread::Semaphore among perl threads ?
Any suggestion appreciated.
Philou