#!/usr/bin/ruby require './clean.rb' BDB::Env.cleanup("tmp", true) module BDB class ThreadHash < Hash def start(val, num) Thread.start do self.env.begin(self) do |txn, b1| b1.delete_if do |k, v| print "\t#{num} #{k} -- #{v}\n" k == val end p "Thread #{num} Pass" Thread.pass b1.each do |k, v| print "\t#{num} #{k} -- #{v}\n" end if num == 1 txn.abort else txn.commit end end p "End Thread #{num}" end end end end env = BDB::Env.new("tmp", BDB::CREATE|BDB::INIT_TRANSACTION) db = env.open_db(BDB::ThreadHash, "txn", nil, BDB::CREATE) {"alpha" => "beta", "gamma" => "delta", "delta" => "epsilon"}. each do |key, value| db[key] = value end db.each do |k, v| print "0 #{k} -- #{v}\n" end t1 = db.start("alpha", 1) t2 = db.start("gamma", 2) t1.join t2.join db.each do |k, v| print "0 #{k} -- #{v}\n" end env.close