在并发编程中,Monitor是一种被多个线程安全使用的对象或模块。Monitor的定义特征是,它的方法是在互斥的情况下执行的。也就是说,在每个时间点上,至多一个线程可能正在执行它的任何方法。这种互斥极大地简化了对Monitor实现的推理,而不是对更新数据结构的并行代码进行推理。
mon_enter() 进入独占区域, 如果有其他线程还未退出,当前线程将一直阻塞。
mon_exit() 退出独占区域
mon_synchronize_synchronize() 进入独占区域并执行块。当块退出时,自动离开独占部分,它内部首尾分别调用monenter(), monexit()。
mon_try_enter() 尝试进入独占区域,如果锁定失败,返回true.
new_cond() 创建一个MonitorMixin::ConditionVariable对象,并将它与接收者关联。
try_mon_enter() mon_try_enter()方法的别名,为了向后兼容
MonitorMixin#new_cond 返回它的对象实例,它与接受者关联。
broadcast() 唤醒所有等待的线程。
signal() 唤醒第一个等待的线程。
wait(timeout = nil) 释放当前线程获得的锁,将自己排入等待队列中。如果提供了timeout,那么将在超时的时候,尝试获得锁,在获得锁喉继续向下执行代码。 不需要手动被其他线程唤醒,如果无法获得锁,会一直等待。
wait_util() 提供一个块,只要这个块返回true,就一直等待。这样的情况下
wait_while() 提供一个块,只要这个块返回true,就一直等待。