diff options
Diffstat (limited to 'thread_sync.rb')
-rw-r--r-- | thread_sync.rb | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/thread_sync.rb b/thread_sync.rb index d567ca51af..7e4c341ad0 100644 --- a/thread_sync.rb +++ b/thread_sync.rb @@ -41,5 +41,28 @@ class Thread end alias_method :deq, :pop alias_method :shift, :pop + + # call-seq: + # push(object, non_block=false, timeout: nil) + # enq(object, non_block=false, timeout: nil) + # <<(object) + # + # Pushes +object+ to the queue. + # + # If there is no space left in the queue, waits until space becomes + # available, unless +non_block+ is true. If +non_block+ is true, the + # thread isn't suspended, and +ThreadError+ is raised. + # + # If +timeout+ seconds have passed and no space is available +nil+ is + # returned. + # Otherwise it returns +self+. + def push(object, non_block = false, timeout: nil) + if non_block && timeout + raise ArgumentError, "can't set a timeout if non_block is enabled" + end + Primitive.rb_szqueue_push(object, non_block, timeout) + end + alias_method :enq, :push + alias_method :<<, :push end end |