实现并发控制

实现并发控制

2024 南京大学《操作系统:设计与实现》
实现并发控制

实现任意计算图

计算任务构成有向无环图

  • (u,v)E(u, v) \in E 表示 vv 要用到前 uu 的值
  • 只要调度器 (生产者) 分配任务效率够高,算法就能并行
void T_worker() {
    while (1) {
        consume().run();
    }
}
void T_scheduler() {
    while (!jobs.empty()) {
        for (auto j : jobs.find_ready()) {
            produce(j);
        }
    }
}
2024 南京大学《操作系统:设计与实现》
实现并发控制

计算图:实现 (2)

为每个节点设置一个条件变量

  • vv 能执行的同步条件:uvu \to v 都已完成
  • uu 完成后,signal 每个 uvu \to v
2024 南京大学《操作系统:设计与实现》
实现并发控制

计算图:例子

center

2024 南京大学《操作系统:设计与实现》
实现并发控制

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

有三种线程

  • TaT_a 若干: 死循环打印 <
  • TbT_b 若干: 死循环打印 >
  • TcT_c 若干: 死循环打印 _

任务:

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

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

  • 打印 “<” 的条件?打印 “>” 的条件?打印 “_” 的条件?
2024 南京大学《操作系统:设计与实现》