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原语时,有责任唤醒另一个进程。