class Thread::Mutex
Thread::Mutex реализует простой семафор, который можно использовать для координации доступа к общим данным из нескольких параллельно работающих потоков.
Пример:
semaphore = Thread::Mutex.new
a = Thread.new {
semaphore.synchronize {
# access shared resource
}
}
b = Thread.new {
semaphore.synchronize {
# access shared resource
}
}
Публичные методы класса
# File thread_sync.rb, line 76 def initialize end
Создаёт новый Mutex
Публичные методы экземпляра
# File thread_sync.rb, line 100 def lock Primitive.rb_mut_lock end
Пытается захватить блокировку и ждёт, если она недоступна. Вызывает ThreadError, если mutex заблокирован текущим потоком.
# File thread_sync.rb, line 83
def locked?
Primitive.cexpr! %q{ RBOOL(mutex_locked_p(mutex_ptr(self))) }
end Возвращает true, если эта блокировка в данный момент удерживается каким-либо потоком.
# File thread_sync.rb, line 91 def owned? Primitive.rb_mut_owned_p end
Возвращает true, если эта блокировка в данный момент удерживается текущим потоком.
# File thread_sync.rb, line 147 def sleep(timeout = nil) Primitive.rb_mut_sleep(timeout) end
Освобождает блокировку и приостанавливает выполнение на timeout секунд, если это значение задано и не равно nil, либо на неопределённое время. Вызывает ThreadError, если mutex не был заблокирован текущим потоком.
После пробуждения поток попытается снова захватить блокировку.
Обратите внимание, что этот метод может пробудить поток и без явного вызова Thread#wakeup. Например, при получении сигнала и т. п.
Возвращает время сна в секундах, если поток был пробуждён, или nil, если истёк тайм-аут.
# File thread_sync.rb, line 127 def synchronize raise ThreadError, "must be called with a block" unless defined?(yield) Primitive.rb_mut_synchronize end
Захватывает блокировку, выполняет блок и освобождает блокировку после завершения блока. См. пример в разделе Thread::Mutex.
# File thread_sync.rb, line 109 def try_lock Primitive.rb_mut_trylock end
Пытается захватить блокировку и сразу возвращает управление. Возвращает true, если блокировка была получена.
# File thread_sync.rb, line 118 def unlock Primitive.rb_mut_unlock end
Пытается захватить блокировку и ждёт, если она недоступна. Вызывает ThreadError, если mutex заблокирован текущим потоком.
Ruby Core © 1993–2025 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.