class Concurrent::ReadWriteLock

def release_read_lock

Returns:
  • (Boolean) - true if the lock is successfully released
def release_read_lock
  while true
    c = @Counter.value
    if @Counter.compare_and_set(c, c-1)
      # If one or more writers were waiting, and we were the last reader, wake a writer up
      if waiting_writer?(c) && running_readers(c) == 1
        @WriteLock.signal
      end
      break
    end
  end
  true
end