Semaphore的理解

 var s:semaphore(:1)

procedure P(i:integer)

begin

   repeat

wait(s)//减1操作

临界区

singal(s)//加1操作

其他操作

forever

end

当第P1访问时首先Wait操作,做-1操作conut为0,不小于0不用进入阻塞队列,进入临界区操作,P2进入时同样-1,count变为-1,小于进入阻塞队列,P3来时count变为-2,当P1使用完临界区时候,做singal操作+1country变为-1,小于0,从阻塞队列中拿出P2进入临界区。队列中还有P3一个进程在阻塞。

信号量分为:互斥信号量和资源信号量

互斥信号量常用于申请或释放资源的使用权,常初始化为1.

资源信号量用于申请或归还资源,可以初始化为大于1的正整数,表示系统中某类资源的可用个数。

wait操作作用于申请资源,进程执行wait语句时,可能会阻塞自己。

singal操作用于释放资源,进程执行singal原语时,有责任唤醒另一个进程。

原文地址:https://www.cnblogs.com/lovezhangyu/p/3403910.html