gdbm:ブロックする

flockを使ってブロッキング。

require 'gdbm'

wait = ARGV[0]

def gdbm_write(k, v)
  puts "#{k}=>#{v}"
  open('lock', 'a') {|f|
    f.flock(File::LOCK_EX)
    GDBM.open('dbfile') {|hash|
      hash[k.to_s] = v.to_s
      sleep 3
    }
  }
end

(10..20).each {|i|
  gdbm_write(i, i*i)
}