Class: FileLock
- Inherits:
-
Object
- Object
- FileLock
- Defined in:
- lib/jiji/util/file_lock.rb
Overview
File.flockを利用したRead-Write-Lock
Instance Method Summary collapse
-
#initialize(lockfile) ⇒ FileLock
constructor
A new instance of FileLock.
-
#readlock(&block) ⇒ Object
読み込みロックする。 - ロックされていても他の読み込みユーザーはブロックさない。 - 他の書き込みユーザーはブロックされる。.
-
#writelock(&block) ⇒ Object
書き込みロックする。 - ロックされている場合、他の読み込みユーザー/書き込みユーザー共にブロックされる。.
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 |