Class: FileLock

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

Overview

File.flockを利用したRead-Write-Lock

Instance Method Summary collapse

Constructor Details

#initialize(lockfile) ⇒ FileLock

Returns a new instance of FileLock.



5
6
7
# File 'lib/jiji/util/file_lock.rb', line 5

def initialize(lockfile)
  @lockfile = lockfile
end

Instance Method Details

#readlock(&block) ⇒ Object

読み込みロックする。

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

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



12
13
14
15
16
17
18
19
20
21
# File 'lib/jiji/util/file_lock.rb', line 12

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

#writelock(&block) ⇒ Object

書き込みロックする。

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



25
26
27
28
29
30
31
32
33
34
# File 'lib/jiji/util/file_lock.rb', line 25

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