class Concurrent::MutexSemaphore

def try_acquire(permits = 1, timeout = nil)

@!macro semaphore_method_try_acquire
def try_acquire(permits = 1, timeout = nil)
  Utility::NativeInteger.ensure_integer_and_bounds permits
  Utility::NativeInteger.ensure_positive permits
  acquired = synchronize do
    if timeout.nil?
      try_acquire_now(permits)
    else
      try_acquire_timed(permits, timeout)
    end
  end
  return acquired unless block_given?
  return unless acquired
  begin
    yield
  ensure
    release(permits)
  end
end