Skip to content

进程同步

为什么需要进程间同步

Question

有一群生产者进程正在生产产品,并将这些产品提供给消费者进程进行消费,生产者进程需要和消费者进程可以并发执行,在两者之间设置了一个具有n可缓冲区的缓冲池,生产者进程需要将所生产的产品放到一个缓冲区中,消费者进程可以从缓冲区取走产品消费。单从生产者程序或消费者程序去看是没有问题的,但是两者并发执行的时候就可能出差错。

Question

有五个哲学家,他们的生活方式是交替地进行思考和进餐,哲学家们共同使用一张圆桌,分别坐在周围的五个椅子上,在圆桌上有五个碗和五只筷子。平时哲学家们进行思考,饥饿时则试图取靠近他们的左右两只筷子,只有两只筷子都被他拿到的时候才能进餐,进餐完毕后,放下左右筷子继续思考。

  • 根源问题:彼此之间没有通信,需要进程间的同步
  • 进程间的同步是要解决
    1. 对竞争资源在多进程间进行使用次数的协调
    2. 使得并发执行的多个进程之间可以有效使用资源互相合作

进程间同步的原则

Info

临界资源指的是一些虽作为共享资源却又无法同时被多个线程共同访问的共享资源。当有进程在使用临界资源时,其他进程必须依据操作系统的同步机制等待占用进程释放该共享资源才可重新竞争使用共享资源。

  1. 空闲让进:资源无占用,允许使用
  2. 忙则等待:资源有占用,请求进程等待
  3. 有限等待:保证有限等待时间能够使用资源
  4. 让权等待:等待时,进程需要让出CPU

进程同步的方法

  1. 消息队列
  2. 共享存储
  3. 信号量

线程同步

Info

当多个线程并发使用进程资源时,也会发生 生产者-消费者问题 等问题,所以进程内的多线程也需要同步。

线程同步的方法

  1. 互斥量
  2. 读写锁
  3. 自旋锁
  4. 条件变量