NOTE

2.5 同步

1. 同步和互斥 1.1. 同步 多个进程按一定顺序执行 1.2. 互斥 多个进程在同一时刻只有一个进程能进入临界区 1.2.1. 临界区 访问同一个资源的代码叫做临界区 2. 同步的方式 2.1. 信号量 一个整形变量,可以执行down和up操作 - down:如果信号量大于 0 ,执行 -1 操

Operating System / Linux创建于 更新于 historical

这是历史学习笔记,可能存在过时或不完整的理解。

1. 同步和互斥

1.1. 同步

多个进程按一定顺序执行

1.2. 互斥

多个进程在同一时刻只有一个进程能进入临界区

1.2.1. 临界区

访问同一个资源的代码叫做临界区

2. 同步的方式

2.1. 信号量

一个整形变量,可以执行down和up操作

  • down:如果信号量大于 0 ,执行 -1 操作;如果信号量等于 0,进程睡眠,等待信号量大于 0;
  • up:对信号量执行 +1 操作,唤醒睡眠的进程让其完成 down 操作。

2.1.1. 互斥量

如果信号量的取值只能为 0 或者 1,那么就成为了 互斥量(Mutex) ,0 表示临界区已经加锁,1 表示临界区解锁。

2.2. 管程

信号量需要处理很多细节问题,引入了管程。 管程引入了Condition的操作:wait()和signal

3. 经典同步问题

3.1. 生产者/消费者问题

  • 信号量
    • 互斥量
  • 管程

3.2. 读者/写者问题

3.3. 哲学家就餐问题

4. 参考