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
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.