Class: DirLock

Inherits:
Object
  • Object
show all
Defined in:
lib/jiji/util/file_lock.rb

Instance Method Summary collapse

Constructor Details

#initialize(lockdir) ⇒ DirLock

Returns a new instance of DirLock.



39
40
41
# File 'lib/jiji/util/file_lock.rb', line 39

def initialize(lockdir)
  @lockfile = "#{lockdir}/.lock"
end

Instance Method Details

#readlock(&block) ⇒ Object

読み込みロックする。

  • ロックされていても他の読み込みユーザーはブロックさない。

  • 他の書き込みユーザーはブロックされる。



46
47
48
49
50
51
52
53
54
55
56
# File 'lib/jiji/util/file_lock.rb', line 46

def readlock ( &block )
  mkfile
  File.open( @lockfile, "r" ) { |f|
    f.flock(File::LOCK_SH)
    begin
      block.call
    ensure
      f.flock(File::LOCK_UN)
    end
  }
end

#writelock(&block) ⇒ Object

書き込みロックする。

  • ロックされている場合、他の読み込みユーザー/書き込みユーザー共にブロックされる。



60
61
62
63
64
65
66
67
68
69
70
# File 'lib/jiji/util/file_lock.rb', line 60

def writelock ( &block )
  mkfile
  File.open( @lockfile, "w" ) { |f|
    f.flock(File::LOCK_EX)
    begin
      block.call
    ensure
      f.flock(File::LOCK_UN)
    end
  }
end