class Mongo::DistinguishingSemaphore
This is a semaphore that distinguishes waits ending due to the timeout being reached from waits ending due to the semaphore being signaled.
@api private
Public Class Methods
new()
click to toggle source
# File lib/mongo/distinguishing_semaphore.rb, line 24 def initialize @lock = Mutex.new @cv = ConditionVariable.new @queue = [] end
Public Instance Methods
broadcast()
click to toggle source
# File lib/mongo/distinguishing_semaphore.rb, line 44 def broadcast @lock.synchronize do @queue.push(true) @cv.broadcast end end
signal()
click to toggle source
# File lib/mongo/distinguishing_semaphore.rb, line 51 def signal @lock.synchronize do @queue.push(true) @cv.signal end end
wait(timeout = nil)
click to toggle source
Waits for the semaphore to be signaled up to timeout seconds. If semaphore is not signaled, returns after timeout seconds.
@return [ true | false ] true if semaphore was signaled, false if
timeout was reached.
# File lib/mongo/distinguishing_semaphore.rb, line 35 def wait(timeout = nil) @lock.synchronize do @cv.wait(@lock, timeout) (!@queue.empty?).tap do @queue.clear end end end