class PulsarSdk::Tweaks::WaitMap
Public Class Methods
new()
click to toggle source
# File lib/pulsar_sdk/tweaks/wait_map.rb, line 4 def initialize @mutex = Mutex.new @map = {} @wait = {} @closed = false end
Public Instance Methods
add(id, value)
click to toggle source
# File lib/pulsar_sdk/tweaks/wait_map.rb, line 12 def add(id, value) @mutex.synchronize do @map[id] = value _, signal = @wait[id] signal.signal unless signal.nil? end value end
clear() { |k, v| ... }
click to toggle source
# File lib/pulsar_sdk/tweaks/wait_map.rb, line 21 def clear @mutex.synchronize do @map.each {|k, v| yield k, v} if block_given? @map = {} end true end
close()
click to toggle source
# File lib/pulsar_sdk/tweaks/wait_map.rb, line 72 def close @closed = true @wait.each do |_, v| _, signal = v signal.broadcast end end
delete(id, timeout = nil)
click to toggle source
# File lib/pulsar_sdk/tweaks/wait_map.rb, line 43 def delete(id, timeout = nil) mutex, signal = [] @mutex.synchronize do return @map.delete(id) if @map.has_key?(id) @wait[id] ||= [Mutex.new, ConditionVariable.new] mutex, signal = @wait[id] end mutex.synchronize do if timeout.nil? while !@closed && !@map.has_key?(id) signal.wait(mutex) end elsif @map.empty? && timeout != 0 timeout_at = TimeX.now.to_f + timeout while !@closed && !@map.has_key?(id) && (res = timeout_at - TimeX.now.to_f) > 0 signal.wait(mutex, res) end end end @mutex.synchronize do @wait.delete id @map.delete id end end
each() { |k, v| ... }
click to toggle source
# File lib/pulsar_sdk/tweaks/wait_map.rb, line 30 def each(&block) @mutex.synchronize do @map.each {|k, v| yield k, v} end end
find(id)
click to toggle source
不会删除元素
# File lib/pulsar_sdk/tweaks/wait_map.rb, line 37 def find(id) @mutex.synchronize do @map[id] end end