class RSpec::Support::ReentrantMutex
Allows a thread to lock out other threads from a critical section of code, while allowing the thread with the lock to reenter that section.
Based on Monitor as of 2.2 - github.com/ruby/ruby/blob/eb7ddaa3a47bf48045d26c72eb0f263a53524ebc/lib/monitor.rb#L9
Depends on Mutex, but Mutex is only available as part of core since 1.9.1:
exists - http://ruby-doc.org/core-1.9.1/Mutex.html dne - http://ruby-doc.org/core-1.9.0/Mutex.html
@private
Public Class Methods
new()
click to toggle source
# File lib/rspec/support/reentrant_mutex.rb, line 15 def initialize @owner = nil @count = 0 @mutex = Mutex.new end
Public Instance Methods
synchronize() { || ... }
click to toggle source
# File lib/rspec/support/reentrant_mutex.rb, line 21 def synchronize enter yield ensure exit end
Private Instance Methods
enter()
click to toggle source
# File lib/rspec/support/reentrant_mutex.rb, line 30 def enter @mutex.lock if @owner != Thread.current @owner = Thread.current @count += 1 end
exit()
click to toggle source
# File lib/rspec/support/reentrant_mutex.rb, line 36 def exit @count -= 1 return unless @count == 0 @owner = nil @mutex.unlock end