use strict; use GDBM_File; use Carp qw(confess); use Fcntl qw(:flock); my %term_doc_count; my $db = tie(%term_doc_count, 'GDBM_File', "resources/term_docCount", GDBM_READER, 0666) or confess("Unable to tie GDBM db : $!"); my $fd = $db->fd(); open(DB_FH, "<&=$fd") or confess "Could not open file: $!"; unless (flock (DB_FH, LOCK_SH | LOCK_NB)) { print "$$: CONTENTION; can't read during write update! Waiting for read lock ($!) .... \n"; unless (flock (DB_FH, LOCK_SH)) { die "flock: $!" } } print "$$: Read lock granted\n"; untie %term_doc_count; close(DB_FH); flock(DB_FH, LOCK_UN);