Thread doc tweaks.
[p5sagit/p5-mst-13.2.git] / ext / threads / shared / queue.pm
index 557833a..30b6ea2 100644 (file)
@@ -1,48 +1,9 @@
-
 package threads::shared::queue;
 
 use threads::shared;
 use strict;
 
-sub new {
-    my $class = shift;
-    my @q : shared = @_;
-    my $q = \@q;
-    return bless $q, $class;
-}
-
-sub dequeue  {
-    my $q = shift;
-    lock(@$q);
-    until(@$q) {
-       cond_wait(@$q);
-    }
-    return shift @$q;
-}
-
-sub dequeue_nb {
-  my $q = shift;
-  lock(@$q);
-  if (@$q) {
-    return shift @$q;
-  } else {
-    return undef;
-  }
-}
-
-sub enqueue {
-    my $q = shift;
-    lock(@$q);
-    push(@$q, @_) and cond_broadcast @$q;
-}
-
-sub pending  {
-  my $q = shift;
-  lock(@$q);
-  return scalar(@$q);
-}
-
-1;
+our $VERSION = '1.00';
 
 =head1 NAME
 
@@ -104,3 +65,38 @@ L<threads>, L<threads::shared>
 
 =cut
 
+sub new {
+    my $class = shift;
+    my @q : shared = @_;
+    return bless \@q, $class;
+}
+
+sub dequeue  {
+    my $q = shift;
+    lock(@$q);
+    cond_wait @$q until @$q;
+    cond_signal @$q if @$q > 1;
+    return shift @$q;
+}
+
+sub dequeue_nb {
+    my $q = shift;
+    lock(@$q);
+    return shift @$q;
+}
+
+sub enqueue {
+    my $q = shift;
+    lock(@$q);
+    push @$q, @_  and cond_signal @$q;
+}
+
+sub pending  {
+    my $q = shift;
+    lock(@$q);
+    return scalar(@$q);
+}
+
+1;
+
+