如何从线程正在使用的哈希中添加/删除元素

时间:2019-03-29 15:04:57

标签: ruby

我正在尝试在线程正在使用的哈希中添加元素,它在错误以下抛出 linkEvent':在迭代过程中无法向哈希添加新键(RuntimeError)

@serverDown = Hash.new
def eventMessage(message)

  @server_thread = Thread.new do
        until @serverDown.empty?
          @serverDown.each do |key, value|
              puts "#{key}"
              sleep 3
        end
          Thread.stop if @serverDown.empty?
      end
    end
  end

  if message.include?("down")
    state = message.split.last
    puts "Adding #{state} to hash"
    @serverDown[state] = Time.now.to_i
    @server_thread.wakeup unless @server_thread.alive?
  end
end

@queue = Queue.new
@queue << "server is down"
@queue << "server is down"
@queue << "server is down"
@queue << "server is up"
@equeue << "unreachable"

until @queue.empty?
  event = @queue.pop
  if event.include?("down") || event.include?("up")
    eventMessage(event)
    sleep 3
    next
  end
  puts "#{event}"
end

我想锁定线程并添加元素以进行哈希处理,稍后再恢复线程。

0 个答案:

没有答案