无法进入临界区的时候选择阻塞而不是忙等待。有sleep和wakeup两个方法。
信号量semaphore
up和down两种操作。down做减一操作,如果信号量大于0就减一,不然就睡眠线程。关键在于原子操作,所以一般是在系统层面的。
首先两个进程同时运行。当A进程想进入临界区的时候执行down操作来做标记,把一般信号量和mutex(互斥锁)都down一遍,这个时候如果信号量小于等于0,则其他进程没办法再进入临界区(会被系统方法阻塞)直至信号量重新大于零。这种就可以解决生产者-消费者模型了,可以保证仓库里的货物一定是大于零的,可以被消费的,而mutex信号量则用来锁住仓库。
互斥量mutex