Ruby MonitorMixin模块翻译

浏览:2540 发布日期:2017-05-20 08:51:25

MonitorMixin模块

在并发编程中,Monitor是一种被多个线程安全使用的对象或模块。Monitor的定义特征是,它的方法是在互斥的情况下执行的。也就是说,在每个时间点上,至多一个线程可能正在执行它的任何方法。这种互斥极大地简化了对Monitor实现的推理,而不是对更新数据结构的并行代码进行推理。

  1. mon_enter() 进入独占区域, 如果有其他线程还未退出,当前线程将一直阻塞。

  2. mon_exit() 退出独占区域

  3. mon_synchronize_synchronize() 进入独占区域并执行块。当块退出时,自动离开独占部分,它内部首尾分别调用monenter(), monexit()。

  4. mon_try_enter() 尝试进入独占区域,如果锁定失败,返回true.

  5. new_cond() 创建一个MonitorMixin::ConditionVariable对象,并将它与接收者关联。

  6. try_mon_enter() mon_try_enter()方法的别名,为了向后兼容

MonitorMixin::ConditionVariable

MonitorMixin#new_cond 返回它的对象实例,它与接受者关联。

  1. broadcast() 唤醒所有等待的线程。

  2. signal() 唤醒第一个等待的线程。

  3. wait(timeout = nil) 释放当前线程获得的锁,将自己排入等待队列中。如果提供了timeout,那么将在超时的时候,尝试获得锁,在获得锁喉继续向下执行代码。 不需要手动被其他线程唤醒,如果无法获得锁,会一直等待。

  4. wait_util() 提供一个块,只要这个块返回true,就一直等待。这样的情况下

  5. wait_while() 提供一个块,只要这个块返回true,就一直等待。