回顾:
并发问题:多线程并发导致资源竞争;
同步概念:协调多线程对共享数据的访问任何时刻只能有一个线程执行临界区代码;
确保同步的方法:底层硬件支持;高层次的编程抽象;
而今天我们要说的信号量和管程都是高层次的编程抽象中的一种;
一、什么叫做信号量
信号量是操作系统提供的一种协调共享资源访问的方法:
- 软件同步是平等线程间的一种同步协商机制;
- 而信号量是由操作系统进行管理的,地位高于进程;
- 信号量表示系统资源的数量。
举个例子,假设在球场上踢球,在没有裁判的情况下,就按场上既定的规则,但是当规则模糊不清时,就需要裁判,信号量相就相当于是裁判,具有最高地位。
信号量是一种抽象的数据类型:
信号量和车站的类比:
如图,假设有两个车站,刚开始是空的,则灯为绿,到两个车道被占满时