Class: LockManager
- Inherits:
-
Object
- Object
- LockManager
- Defined in:
- lib/lock_manager.rb
Instance Method Summary collapse
- #acquire(lock_id) ⇒ Object
- #create(params) ⇒ Object
- #critical_section_insist(lock_id) ⇒ Object
- #critical_section_try(lock_id) ⇒ Object
-
#initialize ⇒ LockManager
constructor
A new instance of LockManager.
- #release(lock_id) ⇒ Object
Constructor Details
#initialize ⇒ LockManager
Returns a new instance of LockManager.
5 6 7 |
# File 'lib/lock_manager.rb', line 5 def initialize @locks = {} end |
Instance Method Details
#acquire(lock_id) ⇒ Object
20 21 22 23 24 25 26 |
# File 'lib/lock_manager.rb', line 20 def acquire( lock_id ) if @locks[lock_id].try_lock lock_id else nil end end |
#create(params) ⇒ Object
9 10 11 12 13 14 15 16 17 18 |
# File 'lib/lock_manager.rb', line 9 def create( params ) systype = params[:systype].to_s locktype = params[:locktype].to_s lock_id = "#{systype}:#{locktype}" if params.has_key?(:key) lock_id += ":#{params[:key].to_s}" end @locks[lock_id] = Mutex.new unless @locks.has_key?( lock_id ) lock_id end |
#critical_section_insist(lock_id) ⇒ Object
34 35 36 37 38 39 40 41 42 |
# File 'lib/lock_manager.rb', line 34 def critical_section_insist( lock_id ) if block_given? if @locks.has_key?( lock_id ) @locks[lock_id].synchronize do yield end end end end |
#critical_section_try(lock_id) ⇒ Object
44 45 46 47 48 49 50 51 52 53 |
# File 'lib/lock_manager.rb', line 44 def critical_section_try( lock_id ) if block_given? if @locks.has_key?( lock_id ) unless acquire( lock_id ).nil? yield release( lock_id ) end end end end |
#release(lock_id) ⇒ Object
28 29 30 31 32 |
# File 'lib/lock_manager.rb', line 28 def release( lock_id ) if @locks.has_key?( lock_id ) @locks[lock_id].unlock end end |