条件变量:万能并行计算框架 (M2)

struct work {
  void (*run)(void *arg);
  void *arg;
}

void Tworker() {
  while (1) {
    struct work *work;
    wait_until(has_new_work() || all_done) {
      work = get_work();
    }
    if (!work) break;
    else {
      work->run(work->arg); // 允许生成新的 work (注意互斥)
      release(work);  // 注意回收 work 分配的资源
    }
  }
}

条件变量:更古怪的习题/面试题

有三种线程

  • Ta 若干: 死循环打印 <
  • Tb 若干: 死循环打印 >
  • Tc 若干: 死循环打印 _

任务:

  • 对这些线程进行同步,使得屏幕打印出 <><_><>_ 的组合

使用条件变量,只要回答三个问题:

  • 打印 “<” 的条件?
  • 打印 “>” 的条件?
  • 打印 “_” 的条件?