Spec-Zone.ru › Ruby 4.0
  1. Thread::
  2. Mutex

class Thread::Mutex

Родительский класс:
Object

Thread::Mutex реализует простой семафор, который можно использовать для координации доступа к общим данным из нескольких параллельно работающих потоков.

Пример:

semaphore = Thread::Mutex.new

a = Thread.new {
  semaphore.synchronize {
    # access shared resource
  }
}

b = Thread.new {
  semaphore.synchronize {
    # access shared resource
  }
}

Публичные методы класса

Thread::Mutex.new → mutex Показать исходный код
# File thread_sync.rb, line 76
def initialize
end

Создаёт новый Mutex

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

lock → self Показать исходный код
# File thread_sync.rb, line 100
def lock
  Primitive.rb_mut_lock
end

Пытается захватить блокировку и ждёт, если она недоступна. Вызывает ThreadError, если mutex заблокирован текущим потоком.

locked? → true or false Показать исходный код
# File thread_sync.rb, line 83
def locked?
  Primitive.cexpr! %q{ RBOOL(mutex_locked_p(mutex_ptr(self))) }
end

Возвращает true, если эта блокировка в данный момент удерживается каким-либо потоком.

owned? → true or false Показать исходный код
# File thread_sync.rb, line 91
def owned?
  Primitive.rb_mut_owned_p
end

Возвращает true, если эта блокировка в данный момент удерживается текущим потоком.

sleep(timeout = nil) → number or nil Показать исходный код
# File thread_sync.rb, line 147
def sleep(timeout = nil)
  Primitive.rb_mut_sleep(timeout)
end

Освобождает блокировку и приостанавливает выполнение на timeout секунд, если это значение задано и не равно nil, либо на неопределённое время. Вызывает ThreadError, если mutex не был заблокирован текущим потоком.

После пробуждения поток попытается снова захватить блокировку.

Обратите внимание, что этот метод может пробудить поток и без явного вызова Thread#wakeup. Например, при получении сигнала и т. п.

Возвращает время сна в секундах, если поток был пробуждён, или nil, если истёк тайм-аут.

synchronize { ... } → result of the block Показать исходный код
# 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.

try_lock → true or false Показать исходный код
# File thread_sync.rb, line 109
def try_lock
  Primitive.rb_mut_trylock
end

Пытается захватить блокировку и сразу возвращает управление. Возвращает true, если блокировка была получена.

lock → self Показать исходный код
# 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.

Spec-Zone.ru

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