Ruby 中 ConditionVariable 的用法?

· 约 2 分钟读完 · 第 134 / 199 章

推荐答案

本题详细解读

ConditionVariable 的作用

ConditionVariable 是 Ruby 中用于线程同步的机制之一。它通常与 Mutex 配合使用,用于在多个线程之间进行条件等待和通知。ConditionVariable 允许一个线程在某个条件不满足时进入等待状态,直到另一个线程修改了条件并通知它继续执行。

关键方法

  • wait(mutex):释放 mutex 并进入等待状态,直到被 signal 或 broadcast 唤醒。唤醒后,线程会重新获取 mutex 并继续执行。
  • signal:唤醒一个正在等待的线程。
  • broadcast:唤醒所有正在等待的线程。

代码解析

  1. 线程1:在 mutex 的保护下,检查 flag 是否为 true。如果 flag 为 false,则调用 resource.wait(mutex) 进入等待状态。当 flag 被设置为 true 并被通知后,线程1会继续执行。

  2. 线程2:在 mutex 的保护下,将 flag 设置为 true,并调用 resource.signal 通知等待的线程1继续执行。

  3. 主线程:通过 sleep(3) 确保子线程有足够的时间完成操作。

使用场景

ConditionVariable 常用于生产者-消费者模型、线程池等场景,其中线程需要等待某些条件满足后才能继续执行。