第三章进程互斥与同步
第三章 进程互斥与同步
互-信号量机制1965年由荷兰的Dijkstra提出信号量(semaphore)是一种软件不忙等待法信号量机制的类型一经典信号量(忙等待)记录型信号量(使用不当可能会造成死锁)一信号量集(资源利用率低)
互斥-信号量机制 1965年由荷兰的Dijkstra提出 信号量( semaphore ) 是一种软件不忙等待法 信号量机制的类型 – 经典信号量(忙等待) – 记录型信号量(使用不当可能会造成死锁) – 信号量集(资源利用率低)
记录型信号量的定义数据结构typedef struct semaphore {intvalue;PCB* P;S;I定义信号量的结构体及变量S
记录型信号量的定义 数据结构 typedef struct semaphore { int value; PCB * P; } S; //定义信号量的结构体及变量S
P-V操作原语P(S)操作原语void P(struct semaphoreSS.value --;if(S.value<o)block(S.P);I/阻塞调用进程,在S.P中排队P操作的主要动作:①s值减1;②若相减结果>=0,则进程继续执行;③若相减结果<0,则进程被封锁,并将它插入到该信号灯的等待队列之中,然后转进程调度程序
P-V操作原语 P(S)操作原语 void P( struct semaphore S ) { S.value -; if ( S.value < 0 ) block( S.P); //阻塞调用进程,在S.P中排队 } P操作的主要动作: ①s值减1; ②若相减结果>=0,则进程继续执行; ③若相减结果<0,则进程被封锁,并将它插入到该信号灯 的等待队列之中,然后转进程调度程序
P-V操作原语V(S)操作原语void V(struct semaphoreSHS.value ++;if(S.value<=o)wakeup(S.P);I/唤醒S.P排队中某个进程V操作的主要动作:①s值加1;②若相加结果>0,则进程继续执行:③若相加结果<=0,则从该信号灯的等待队列中移出一个进程,解除它的等待状态,然后返回本进程继续执行
P-V操作原语 V(S)操作原语 void V( struct semaphore S ) { S.value ++; if ( S.value <= 0 ) wakeup( S.P); //唤醒S.P排队中某个进程 } V操作的主要动作: ①s值加1; ②若相加结果>0,则进程继续执行; ③若相加结果<=0,则从该信号灯的等待队列中移出一个 进程,解除它的等待状态,然后返回本进程继续执行