модуль MonitorMixin
Методы публичного класса
# File ext/monitor/lib/monitor.rb, line 153 def self.extend_object(obj) super(obj) obj.__send__(:mon_initialize) end
# File ext/monitor/lib/monitor.rb, line 223 def initialize(...) super mon_initialize end
Используйте extend MonitorMixin или include MonitorMixin вместо этого конструктора. Обратитесь к примерам выше, чтобы понять, как использовать этот модуль.
Методы публичного экземпляра
# File ext/monitor/lib/monitor.rb, line 170 def mon_enter @mon_data.enter end
Входит в эксклюзивную секцию.
# File ext/monitor/lib/monitor.rb, line 177 def mon_exit mon_check_owner @mon_data.exit end
Выходит из эксклюзивной секции.
# File ext/monitor/lib/monitor.rb, line 185 def mon_locked? @mon_data.mon_locked? end
Возвращает true, если данный монитор заблокирован каким-либо потоком
# File ext/monitor/lib/monitor.rb, line 192 def mon_owned? @mon_data.mon_owned? end
Возвращает true, если данный монитор заблокирован текущим потоком.
# File ext/monitor/lib/monitor.rb, line 201 def mon_synchronize(&b) @mon_data.synchronize(&b) end
Входит в эксклюзивную секцию и выполняет блок. Выходит из эксклюзивной секции автоматически при выходе из блока. См. пример в MonitorMixin.
# File ext/monitor/lib/monitor.rb, line 161 def mon_try_enter @mon_data.try_enter end
Попытка входа в эксклюзивную секцию. Возвращает false если блокировка не удалась.
# 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.
Приватные методы экземпляра
# File ext/monitor/lib/monitor.rb, line 242 def mon_check_owner @mon_data.mon_check_owner end
# 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.