Sha256: 4ae8d4abb95ce9dfdb3edcabc9360d74df9ddb0837cada48c98624c9fddb449e
Contents?: true
Size: 1.51 KB
Versions: 10
Compression:
Stored size: 1.51 KB
Contents
require "thread" module Bunny # @private module Concurrent # Akin to java.util.concurrent.Condition and intrinsic object monitors (Object#wait, Object#notify, Object#notifyAll) in Java: # threads can wait (block until notified) on a condition other threads notify them about. # Unlike the j.u.c. version, this one has a single waiting set. # # Conditions can optionally be annotated with a description string for ease of debugging. # @private class Condition attr_reader :waiting_threads, :description def initialize(description = nil) @mutex = Mutex.new @waiting_threads = [] @description = description end def wait @mutex.synchronize do t = Thread.current @waiting_threads.push(t) end Thread.stop end def notify @mutex.synchronize do t = @waiting_threads.shift begin t.run if t rescue ThreadError retry end end end def notify_all @mutex.synchronize do @waiting_threads.each do |t| t.run end @waiting_threads.clear end end def waiting_set_size @mutex.synchronize { @waiting_threads.size } end def any_threads_waiting? @mutex.synchronize { !@waiting_threads.empty? } end def none_threads_waiting? @mutex.synchronize { @waiting_threads.empty? } end end end end
Version data entries
10 entries across 10 versions & 1 rubygems