该解决方案使用了三个信号量:一个称为full,用来记录充满的缓冲槽数目,一个称为empty,记录空的缓冲槽数目,一个是mutex用来确保生产者和消费者不会同时访问缓冲区。full的初值为0,empty的初值为缓冲区中槽的数目,mutex的初值为1。供两个或多个进程使用的信号量,其初值为1,保证同时只有一个进程可以进入临界区,称作二元信号量(binary semaphore)。如果每个进程在进入临界区前都执行一个down操作,并在刚刚退出时执行一个up操作,就能实现互斥。
引自《现代操作系统》