临界资源:诸进程间需要互斥方式对其进行共享的资源。
访问临界资源那段代码称为临界区。
信号量:是一种特殊的变量。可以用来表示资源数量。当信号量为负时还可以表示排队进程数。
P表示要资源,V表示释放资源。
当进行互斥操作时,假定有2台打印机,4个进程都需要用打印机。这时候信号量s=2。当有两个进程去用打印机,第一个进程用打印机,信号量s=2-1=1;第二个进程用打印机,信号量1-1=0,假定这两个进程时间片到了,暂停进程,后两个进程又要进行p操作,但是没有空闲打印机给它们,信号量0-2=-2,说明有排队。
互斥共享时,进行p操作,当信号量大于0,进行正常操作,当信号量小于0,有进程进入排队队列。
当互斥进入v操作,假如有进程用完打印机,释放了资源,信号量s=-2+1=-1,排队由原来两个变成一个,当又有一个进程用完打印机,信号量s=-1+1=0,整个资源进入正常状态,没有排队了。
一般来说,互斥进程,信号量初始值为1,先进行p操作,要资源,再进行v操作。可以理解为去买火车票,没有排队,买票的人都挤在一个窗口,当所有人说要买票,也就是p操作,售票员只能受理一个,只有受理完一个,释放了资源,才能进行下一个。
同步模型,用生产者与消费者理解。
信号量分为两个,消费者开始要资源进行p操作,这时候没有资源,信号量s1=0,0-1=-1,消费者进入排队。生产者生产了一个产品,进行v操作,释放了一个资源,信号量s2=1,当产品进入缓冲区,信号量s2-1=0,s1+1=1,消费者从排队队列出来,进行p操作,要资源。