pv操作2.doc

上传人:b****1 文档编号:231725 上传时间:2022-10-07 格式:DOC 页数:7 大小:28.50KB
下载 相关 举报
pv操作2.doc_第1页
第1页 / 共7页
pv操作2.doc_第2页
第2页 / 共7页
pv操作2.doc_第3页
第3页 / 共7页
pv操作2.doc_第4页
第4页 / 共7页
pv操作2.doc_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

pv操作2.doc

《pv操作2.doc》由会员分享,可在线阅读,更多相关《pv操作2.doc(7页珍藏版)》请在冰豆网上搜索。

pv操作2.doc

线程是进程的一个组成部分,一个进程可以有多个线程,而且至少有一个可执行线程。

进程的多个线程都在进程的地址空间内活动。

资源是分给进程的,而不是分给线程的,线程需要资源时,系统从进程的资源配额中扣除并分配给它。

处理机调度的基本单位是线程,线程之间竞争处理机,真正在处理机上运行的是线程。

线程在执行过程中,需要同步。

例题1  解:

设信号量初值S=1

          汽车进程Pi(i=1,2,3,…)

          到达桥头

          P(s)

          桥行驶

          到达桥另一端

          V(s)

例题二若有一售票厅只能容纳300人,当少于300人时,可以进入。

否则,需在外等候,

若将每一个购票者作为一个进程,请用P、V操作编程。

              解:

信号量初值S=300

               购票者进程Pi(i=1,2,3,…)

               P(s)

               进入售票厅

               购票

               退出售票厅

               V(s)

例题三有一只铁笼子,每次只能放入一只动物,猎手向笼中放入老虎,农民向笼中放入猪,动物园等待取笼中的老虎,饭店等待取笼中的猪,试用P、V操作写出能同步执行的程序。

解:

两个生产者和两个消费者共享了一个仅能存放一件产品的缓冲器,生产者各自生产不同的产品,消费者各自取自己需要的产品,P、V操作编程为:

猎手进程   农民进程   动物园进程     饭店进程

  P(s)       P(s)       P(s1)         P(s2)

  放入虎    放入猪      买老虎        买猪

  V(s1)      V(s2)      V(s)          V(s)

其中S初值=1,S1=S2=0

例题四桌上有一只盘子,每次只能放入一个水果。

爸爸专向盘中放苹果,妈妈专向盘中放桔子,女儿专等吃盘中的苹果,儿子专等吃盘中的桔子。

用P、V操作写出它们能正确同步的程序。

解:

信号量初值S1=0,S2=0,S=1

 爸爸进程  妈妈进程  女儿进程 儿子进程

 repeat        repeat         repeat         repeat

    P(s)         P(s)         P(s1)          P(s2)

    放苹果     放桔子       取苹果          取桔子

    V(s1)        V(s2)       V(s)            V(s)

 untilfalse   untilfalse untilfalse untilfalse

例题五设有两个优先级相同的进程P1和P2如下,S1和S2初值均为0,求:

P1,P2并发执行结束后,x,y,z分别是多少?

          进程P1                 进程P2

          y:

=1;                     x:

=1;

          y:

=y+2;                 x:

=x+1;

          V(s1);                   P(s1);

          z:

=y+1;                 x:

=x+y;

          P(s2);                    V(s2)

          y:

=z+y;                 z:

=x+z;

解:

因为P1、P2是并发进程,所以P1和P2调度顺序不确定。

假设P1先执行,当P1执行到P(s2)时,s2=-1,P1阻塞,此时y=3,z=4;当调度程序调度到P2时,由于进程P1巳执行到了V(s1),P2在执行P(s1)时,不阻塞而继续执行,当执行到V(s2)时,将P1唤醒,然后执行到最后一个语句,此时x=5,z=9;当P1再次被唤醒、调度时,

继续执行P1的最后一处语句,此时y=12.

所以最后结果是:

x=5,y=12,z=9.

如果P2先执行,结果同上。

 习题1:

有三个并发进程使用同一个缓冲区,进程P1负责读数据到缓冲区,P2负责加工缓冲区中的数据,进程P3负责将缓冲区中加工后的数据输出.在进程P3没有输完之前,进程P1不能读入新的数据到缓冲区中.请用P、V操作编程.

解:

信号量初值:

S1=0,S2=0,S3=0

          进程P1        进程P2       进程P3

          读数据到       P(S1)          P(S2)

           缓冲区           加工          输出

           V(S1)            V(S2)          V(S3)

           P(S3)

习题2:

设有六个进程P1、P2、P3、P4、P5、P6,它们并发执行。

由P1开始执行,

 P6执行后结束。

当进程P1执行后,进程P2、P3才能执行;当进程P2执行后,进程P4才能执行;当进程P3执行后,进程P5才能执行;当进程P4、P5都执行后,进程P6才能执行;请用P、V操作编程.

 解:

这是一个同步问题,信号量初值:

S2=0,S3=0,S4=0,S5=0,S6=0

          进程P1        进程P2         进程P3

          执行P1          P(S2)           P(S3)

           V(S2)           执行P2        执行P3

           V(S3)            V(S4)          V(S5)

 

          进程P4        进程P5         进程P6

          P(S4)           P(S5)            P(S6)

          执行P4        执行P5         P(S6)

           V(S6)          V(S6)          执行P6

例一.在某展示厅设置一个自动计数系统,以计数器count表示在场的人数,count是动态变化的,若有一个人进入展示厅进程pin对计数器count加1,当有一个人退出展示厅时,进程pout实现计数器减1由于进、出所以展示厅的人是随机的,用P-V操作实现。

(并发进程之间的互斥问题)

解:

定义信号量:

S:

表示是否有进程进入临界区,初值为1.(表示没有进程进入临界区)

begin

  count:

Integer;

  S:

semaphore;

  count:

=0;

  S:

=1;

cobegin

processPin

     R1:

Integer;

begin

P(S);

R1:

=count;

R1:

=R1+1;

count:

=R1;

V(S);

end;

  ProcessPout

     R2:

Integer;

begin

P(S);

R2:

=count;

R2:

=R2-1;

count:

=R2;

V(S);

end;

count;

end;

例二.与生产者和消费过者相似的问题,把“A进程将记录送入缓冲器”看生产者生产了一件物品且把物品存入缓冲器“把“B进程从缓冲器中取出记录并加工”看作是消费者从缓冲器取出物品去消费,缓冲器中只能放一个记录(一件物品),用P-V操作实现。

(并发进程之间的同步问题)

解:

定义两个信号量为:

sp和sg。

sp:

表示生产者是否右以把物品存入缓冲器。

由于缓冲器只能存放一个物品,因此sp的初值为1,即sp:

=1。

sg:

表示缓冲是否存有物品,它的初值应该为0,即sg:

=0,表示缓冲器中还没有物品存在。

生产者和消费者两个进程并发执行时,可按以下的方式实现同步:

     

sp:

=1;sg:

=0;

 cobegin

 processproducer(生产者进程)

 begin

L1:

produceaproduct;

 P(sp);

Buffer:

=product;

V(sg);

gotoL1

end

processconsumer(消费者进程)

 begin

 L2:

P(sg);

 Takeaproduct;

V(sp);

consume;

gotoL1

end;

coend;

例三.如果一个生产者和一个消费共享缓冲器容量为可以存放n件物品时,生产者总可继续存入物品;同时当缓冲器的物品不为“0”时,消费者总可从缓冲器中取走物品,用P-V操作实现。

(并发进程之间的同步问题)

解:

sp:

表示生产者是否可以把物品存入,初值为n;(因为,缓冲器的容量为n件物品)

sg:

表示缓冲器中是否存有物品,初值为0.

B:

away[0:

n-1]ofinteger;

k,t:

integer;

k:

=0;t:

=0;sp:

=n;sg:

=0;

cobegin

processproducer

    begin

    L1:

produceaproduct;

    B[k]:

=product;

    k:

=(k+1)modn;

    V(sg);

    gotoL1

coend;

processconsumer

    begin

    L2:

P(sg);

    TackaproductfromB[t];

    t:

=(t+1)modn;

    V(sp);

    consume;

    goto:

=L2

    end

coend

例五.桌上有一只盘子,每一次放入一个水果,爸爸向盘中放苹果,妈妈向盘中放桔子,一个女儿专吃盘中的苹果,一个儿了专等吃盘是的桔子。

试用P-V操作定出他们能同步的流程图。

(并发进程之间同步与互斥的混合问题)

解:

定义信号量:

dish:

表明盘子中是否为空,初值为1;

Apple:

表明盘子中是否有苹果,初值为0;

Orange:

表明盘子中是否有桔子,初值为0;

main()

{cobegin

  father();

  mother();

     son();

daughter();

    coend

}

father()

{P(dish);

放苹果

V(apple);

}

mother()

{P(dish);

  …

放桔子

  …

V(orange);

}

son()

{P(orange);

  …

取桔子

  …

V(dish);

}

daughter()

{P(apple);

  …

取苹果

  …

V(dish);

}

例六.设公共汽车上,司机和售票员的活动分别为:

司机的活动是启动车辆、正常开驶、到站停车;售票员的活动是关门、售票、开门。

①试指出在汽车出站、行驶、到站过程中,述两种活动有什么同步关系?

②用P-V操作实现它们之间的同步关系。

(并发进程之间的同步问题)

解:

①司机启动车

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > IT认证

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1