互斥锁
互斥锁(mutex lock)的目的是解决临界区。一个进程进入临界区时就获得锁,离开临界区释放锁。
实现算法如下:
acquire(){
while(!available);
available=false;//获得锁
}
release(){
available=true;//释放锁
}
acquire()和release()必须是原子操作,即它们不可被中断,因此互斥锁通常采用硬件机制来实现。
互斥锁会出现忙等待现象。
信号量
信号量有整型信号量和记录型信号量两种,后者是我们常用的,也是较好的一种信号量机制。
信号量中有两种基本操作,wait和signal原语,也称为P操作和V操作,分别用来请求和释放资源,对应着资源的减少和增加。
整型信号量与记录型信号量
整型信号量是一个整数型变量,用来表示剩余资源的数目,它的P、V操作如下:
wait(S){
while(S<=0);
S--