In [1]:
from mosaic import *
OS2023(9)

9. 并发控制:同步 (1)¶

Changelog & 反馈

  • Model Checker 在代码后显示所有可能的输出 (过往课堂示例也已更新,体验提升明显)
  • 修复了 L0 Online Judge 的小问题
  • 上线 M2 的 Online Judge 和 L1 实验

背景回顾:我们已经了解如何通过 “不可优化、保证顺序” 的原子指令实现自旋锁,以及借助操作系统 (系统调用) 实现线程的睡眠,从而不致于出现 CPU 空转的浪费。然而,互斥并不总是能满足多个并发线程协作完成任务的需求,例如大家试着在完成 Minilab 时应该已经遇到了一些困难。如何能便捷地让共享内存的线程协作以共同完成计算任务?

本讲内容:并发控制:同步

  • 同步问题的定义
  • 生产者-消费者问题
  • 条件变量
In [2]:
slideshow('9.1')
In [3]:
demo('pc-mutex', 'c/pc-mutex.c', libs=['thread.h', 'thread-sync.h'])
In [4]:
slideshow('9.2')
In [5]:
demo('pc-cv', 'c/pc-cv.c', libs=['thread.h', 'thread-sync.h'])
In [6]:
model('m/cv-if.py', check=True)