Spec-Zone.ru › Ruby 3.1

модуль MonitorMixin

Методы публичного класса

extend_object(obj) Показать исходный код
# File ext/monitor/lib/monitor.rb, line 153
def self.extend_object(obj)
  super(obj)
  obj.__send__(:mon_initialize)
end
Вызывает метод суперкласса
new(...) Показать исходный код
# File ext/monitor/lib/monitor.rb, line 223
def initialize(...)
  super
  mon_initialize
end

Используйте extend MonitorMixin или include MonitorMixin вместо этого конструктора. Обратитесь к примерам выше, чтобы понять, как использовать этот модуль.

Вызывает метод суперкласса

Методы публичного экземпляра

mon_enter() Показать исходный код
# File ext/monitor/lib/monitor.rb, line 170
def mon_enter
  @mon_data.enter
end

Входит в секцию с эксклюзивным доступом.

mon_exit() Показать исходный код
# File ext/monitor/lib/monitor.rb, line 177
def mon_exit
  mon_check_owner
  @mon_data.exit
end

Выходит из секции с эксклюзивным доступом.

mon_locked?() Показать исходный код
# File ext/monitor/lib/monitor.rb, line 185
def mon_locked?
  @mon_data.mon_locked?
end

Возвращает true, если этот монитор заблокирован какой-либо нитью.

mon_owned?() Показать исходный код
# File ext/monitor/lib/monitor.rb, line 192
def mon_owned?
  @mon_data.mon_owned?
end

Возвращает true, если этот монитор заблокирован текущей нитью.

mon_synchronize(&b) Показать исходный код
# File ext/monitor/lib/monitor.rb, line 201
def mon_synchronize(&b)
  @mon_data.synchronize(&b)
end

Входит в секцию с эксклюзивным доступом и выполняет блок. Выходит из секции с эксклюзивным доступом автоматически при выходе из блока. См. пример в MonitorMixin.

Также алиас: synchronize
mon_try_enter() Показать исходный код
# File ext/monitor/lib/monitor.rb, line 161
def mon_try_enter
  @mon_data.try_enter
end

Попытка войти в секцию с эксклюзивным доступом. Возвращает false, если блокировка не удалась.

Также алиас: try_mon_enter
new_cond() Показать исходный код
# File ext/monitor/lib/monitor.rb, line 210
def new_cond
  unless defined?(@mon_data)
    mon_initialize
    @mon_initialized_by_new_cond = true
  end
  return ConditionVariable.new(@mon_data)
end

Создает новый MonitorMixin::ConditionVariable, связанный с объектом Monitor.

synchronize(&b)
Алиас для: mon_synchronize
try_mon_enter()

Для обеспечения обратной совместимости

Алиас для: mon_try_enter

Методы закрытого экземпляра

mon_check_owner() Показать исходный код
# File ext/monitor/lib/monitor.rb, line 242
def mon_check_owner
  @mon_data.mon_check_owner
end
mon_initialize() Показать исходный код
# File ext/monitor/lib/monitor.rb, line 230
def mon_initialize
  if defined?(@mon_data)
    if defined?(@mon_initialized_by_new_cond)
      return # already initialized.
    elsif @mon_data_owner_object_id == self.object_id
      raise ThreadError, "already initialized"
    end
  end
  @mon_data = ::Monitor.new
  @mon_data_owner_object_id = self.object_id
end

Инициализирует MonitorMixin после включения в класс или при расширении объекта с помощью MonitorMixin

Ruby Core © 1993–2022 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API