信号量(英文:Semaphore),是荷兰著名的计算机科学家Dijkstra于1965年提出的一个同步机构,其基本思想是在多个相互合作的进程之间使用简单的信号来同步。[1] 信号量的工作机制非常简单,就是对一个由OS维护的变量进行加1或者减1操作。初始化的时候通过OS提供的API函数可以创建一个信号量,并且给这个变量赋初值,获取信号量的时候,0S会对这个变量减1;释放这个信号量的时候,0S会对这个变量加1。如果这个信号量变成0,那么再想获取这个信号量就必须等待了,直到它被释放一次。因此信号量类似于一个计数器,利用这样简单的计数器来维护某些公共资源就能避免冲突。[2]
描述
以一个停车场的运作为例。简单起见,假设停车场只有三个车位,一开始三个车位都是空的。这时如果同时来了五辆车,看门人允许其中三辆直接进入,然后放下车拦,剩下的车则必须在入口等待,此后来的车也都不得不在入口处等待。这时,有一辆车离开停车场,看门人得知后,打开车拦,放入外面的一辆进去,如果又离开两辆,则又可以放入两辆,如此往复。
在这个停车场系统中,车位是公共资源,每辆车好比一个线程,看门人起的就是信号量的作用。