Я думаю, вы ищете что-то более похожее на это. Он будет работать с любым объектом, созданным после его выполнения. Это не идеально, особенно когда Thread.stop находится за пределами мьютекса. В Java, ожидая в потоке, освобождает монитор.
class Object
def wait
@waiting_threads = [] unless @waiting_threads
@monitor_mutex = Mutex.new unless @monitor_mutex
@monitor_mutex.synchronize {
@waiting_threads << Thread.current
}
Thread.stop
end
def notify
if @monitor_mutex and @waiting_threads
@monitor_mutex.synchronize {
@waiting_threads.delete_at(0).run unless @waiting_threads.empty?
}
end
end
def notify_all
if @monitor_mutex and @waiting_threads
@monitor_mutex.synchronize {
@waiting_threads.each {|thread| thread.run}
@waiting_threads = []
}
end
end
end