S.value的物理意义S.value用于表示资源数目或请求使用某一资源的进程个数的整形量.S是与临界区内所使用的公用资源有关的信号量S.value>0表示可供并发进程使用的资源数。一P(S)操作时表示,表示进程请求分配一个该类资源,将对S.value减1,若S.value<0表示资源已经分配完,此时IS.value|表示正在S.P队列中等待使用临界区的进程数一V(S)操作表示进程释放一个该类资源,S.value加1,若S.value<=0表示S.P队列中有进程等待分配该类资源应唤醒其中的一个进程
S.value的物理意义 S.value 用于表示资源数目或请求使用某一资 源的进程个数的整形量. S是与临界区内所使用的公用资源有关的信号量。 S.value>0 表示可供并发进程使用的资源数。 – P(S)操作时表示,表示进程请求分配一个该类资源,将 对S.value减1,若S.value<0 表示资源已经分配完,此 时|S.value|表示正在S.P队列中等待使用临界区的进 程数 – V(S)操作表示进程释放一个该类资源,S.value加1,若 S.value<=0表示S.P队列中有进程等待分配该类资源, 应唤醒其中的一个进程
用信号量机制实现N进程间的互斥为N个进程设置一个互斥的信号量mutex,mutex.value为1(实现互斥)进程进入临界区前用P(mutex)操作申请资源进程退出临界区后用V(mutext)操作释放资源
用信号量机制实现N进程间的互斥 为N个进程设置一个互斥的信号量mutex, mutex.value为1(实现互斥) 进程进入临界区前用P(mutex)操作申请资源 进程退出临界区后用V(mutext)操作释放资源
struct semaphore mutex'mutex.value=1://初始化资源数量为1cobeginvoid process1(void)(while(1 ) [P(mutex);//进程1访问临界资源V(mutex);·非临界区代码人人void processN(void)(while(1 ) (P(mutex);进程N访问临界资源V(mutex);.;//非临界区代码11coend
struct semaphore mutex; mutex.value=1; //初始化资源数量为1 cobegin void process1(void) { while( 1 ) { P(mutex); .; //进程1访问临界资源 V(mutex); .;//非临界区代码 } } . void processN(void) { while( 1 ) { P(mutex); .; //进程N访问临界资源 V(mutex); .;//非临界区代码 } } coend
解决老问题struct semaphoreS=1;l/S.value=1P1:P(S);R1=count;R1=R1+1;count=R1;V(S);P2:P( S);R2=count;R2=R2+1;count=R2;V(S);
解决老问题 struct semaphore S = 1; // S.value = 1; P1: P( S ); R1=count; R1=R1+1; count=R1; V( S ); P2: P( S ); R2=count; R2=R2+1; count=R2; V( S );
进程同步进程同步:多个合作进程为了完成同一个任务在执行速度上必须相互协调。进程同步的例子一计算与打印的同步关系Buffer进程互斥与进程同步统称为进程同步进程互斥实际上是进程同步的一种特殊情况,一个等待使资源的进程在得到占用资源的进程发出“释放资源”的信息后就可以使用该资源了
进程同步 进程同步: 多个合作进程为了完成同一个任务, 在执行速度上必须相互协调。 进程同步的例子 – 计算与打印的同步关系 Buffer C P 进程互斥与进程同步统称为进程同步 进程互斥实际上是进程同步的一种特殊情况,一个等 待使资源的进程在得到占用资源的进程发出“释放 资源”的信息后就可以使用该资源了