Mutex

Mutex(Mutal Exclusion = 互斥锁)保证了共享数据不会同时被多个线程访问。Mutex的典型用法如下(m表示Mutex对象):

m.lock
begin
  # 受m保护的临界区(critical section)
ensure
  m.unlock
end

或者,可以简化为

m.synchronize {
  # 受m保护的临界区
}

超类:

类方法:

Mutex.new

生成并返回新的mutex。

方法:

exclusive_unlock { ... }

打开锁定,将等待解锁的线程状态变为可运行状态之后执行块的内容。

在块运行结束之前,不会进行线程切换。

self未被锁定则返回nil。否则返回self

lock

锁上mutex对象。每次只能有一个线程进行mutex锁定。若某线程想要对已经上锁的mutex进行锁定的话,将会被挂起,直到mutex解锁为止。

返回self

locked?

若mutex已经上锁,则返回真。

synchronize { ... }

锁上mutex并运行块的内容。运行结束后必须解锁mutex。

try_lock

尝试锁上mutex,若锁定成功则返回真;若无法锁定则放弃锁定并返回假。

unlock

解锁mutex。重开等待解锁mutex的线程。

self未被锁定则返回nil。否则返回self