class Concurrent::ReentrantReadWriteLock

def release_read_lock

Returns:
  • (Boolean) - true if the lock is successfully released
def release_read_lock
  held = @HeldCount.value = @HeldCount.value - 1
  rlocks_held = held & READ_LOCK_MASK
  if rlocks_held == 0
    c = @Counter.update { |counter| counter - 1 }
    # If one or more writers were waiting, and we were the last reader, wake a writer up
    if waiting_or_running_writer?(c) && running_readers(c) == 0
      @WriteQueue.signal
    end
  elsif rlocks_held == READ_LOCK_MASK
    raise IllegalOperationError, "Cannot release a read lock which is not held"
  end
  true
end