《《并发性互斥和同步》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《并发性互斥和同步》PPT课件.ppt(108页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、CHAPTER CHAPTER 5 5Concurrency:MutualExclusionandSynchronization(并发性:互斥和同步并发性:互斥和同步并发性:互斥和同步并发性:互斥和同步)Concurrency(并发性)(并发性)(并发性)(并发性)CommunicationamongprocessesSharingofandcompeting(竟争竟争)forresourcesSynchronizationoftheactivitiesofmultipleprocessesAllocationofprocessortimetoprocesserConcurrencyMulti
2、pleapplicationsMultiprogrammingMultiprogrammingStructuredapplicationApplicationcanbeasetofconcurrentApplicationcanbeasetofconcurrentprocessesprocessesOperating-systemstructureOperatingsystemisasetofprocessesorOperatingsystemisasetofprocessesorthreadsthreads5.1PRINCIPLESOFNCURRENCY(并发的原理并发的原理并发的原理并发的
3、原理)DifficultieswithConcurrency1.Sharingglobalresources2.Managementofallocationofresources3.ItbecomeverydifficulttolocateaProgrammingerrorsASimpleExampleprocedure echo;Var out,in:character;begininput(in,keyboard);out:=in;output(out,display);endASimpleExampleProcess P1Process P1 Process P2 Process P2.
4、Input(in,keyboard).Input(in,keyboard).Input(in,keyboard)Input(in,keyboard)Out:=in out:=inOut:=in out:=inOutput(out,display).Output(out,display).Output(out,display)Output(out,display).OperatingSystemConcerns(操作系统关注的问题)(操作系统关注的问题)(操作系统关注的问题)(操作系统关注的问题)Keeptrackofactiveprocesses:PCBKeeptrackofactivepro
5、cesses:PCBAllocateanddeallocateresourcesAllocateanddeallocateresources Processortime:schedulingProcessortime:scheduling Memory:virtualmemoryMemory:virtualmemory FilesFiles I/OdevicesI/OdevicesProtectdataandresourcesProtectdataandresourcesResultofprocessmustbeindependentoftheResultofprocessmustbeinde
6、pendentofthespeedofexecutionofotherconcurrentspeedofexecutionofotherconcurrentprocessesprocesses(应保证进程执行的结果与速度无关)(应保证进程执行的结果与速度无关)(应保证进程执行的结果与速度无关)(应保证进程执行的结果与速度无关)ProcessInteractionProcessesunawareofeachotherProcessesunawareofeachother-Competition-Competition-Mutualexclusion,Deadlock,Starvation-Mut
7、ualexclusion,Deadlock,StarvationProcessesindirectlyawareofeachotherProcessesindirectlyawareofeachother-Cooperationbysharing-Cooperationbysharing-Mutualexclusion,Deadlock,Starvation,Data-Mutualexclusion,Deadlock,Starvation,Datacoherencecoherence(一致性一致性)ProcessdirectlyawareofeachotherProcessdirectlyaw
8、areofeachother-C-Cooperationbycommunicationooperationbycommunication-D-Deadlock,Starvationeadlock,Starvation 表51进程的交互知道程度关系一个进程对其他进程的影响潜在的控制问题进进程程之之间间不不知知道道对对方方(进程间无工作联系)竞争1一个进程的结果与其它进程的活动无关2进程的分时可能会受到影响互斥死锁(可复用的资源)饿死进程间接知道对方进程间接知道对方(如共享对象)通过共享合作1.一个进程的结果可能依赖于从其他进程获得的信息2.进程的分时可能会受到影响互斥死锁(可复用的资源)饿死数据
9、一致性进程直接知道对方进程直接知道对方(它们有可用的通信原语)通过通信合作1.一个进程的结果可能依赖于从其他进程获得的信息2.进程的分时可能会受到影响死锁(可消费的资源)饿死CompetitionAmongProcessesforResourcesMutualExclusion(互斥互斥)CriticalsectionsCriticalsections(临界区)(临界区)(临界区)(临界区)OnlyoneprogramatatimeisallowedinitsOnlyoneprogramatatimeisallowedinitscriticalsection(criticalsection(一
10、次仅允许一个进程在临界区一次仅允许一个进程在临界区一次仅允许一个进程在临界区一次仅允许一个进程在临界区)ExampleonlyoneprocessatatimeisallowedtoExampleonlyoneprocessatatimeisallowedtosendcommandtotheprintersendcommandtotheprinter(critical resource)()(例如一次仅允许一个进程发打印命令例如一次仅允许一个进程发打印命令)Deadlock(死锁)(死锁)StarvationCompetitionAmongProcessesforResourcesDeadlo
11、ckDeadlock例例如如,有有两两个个进进程程P1P1、P2P2,竞竞争争两两个个资资源源R1R1、R2R2。假设。假设占用占用:P1P1(R2R2)and P2 and P2(R1R1)申请申请:P1P1(R1R1)and P2 and P2(R2R2)结果:结果:P1P1、P2P2永久等待(死锁)永久等待(死锁)CompetitionAmongProcessesforResourcesStarvationStarvation(饿死)(饿死)例如,有三个进程例如,有三个进程例如,有三个进程例如,有三个进程P1P1P1P1、P2P2P2P2、P3P3P3P3,竞争资源,竞争资源,竞争资源,
12、竞争资源R R R R假设假设假设假设占用占用占用占用:P1P1P1P1(R R R R)申请申请申请申请:P2P2P2P2(R R R R)and P3 and P3 and P3 and P3(R R R R)释放:释放:释放:释放:P1P1P1P1(R R R R)占用占用占用占用:P2P2P2P2(R R R R)申请申请申请申请:P1P1P1P1(R R R R)and P3 and P3 and P3 and P3(R R R R)释放:释放:释放:释放:P2P2P2P2(R R R R)占用占用占用占用:P1P1P1P1(R R R R)结果:结果:结果:结果:P3P3P3P3(
13、饿死)(饿死)(饿死)(饿死)MutualExclusionMechanism互斥机制互斥机制互斥机制互斥机制entry section critical sectionexit section (阅读(阅读P194,图,图5.1)CooperationAmongProcessesbySharing(进程间由于共享合作)(进程间由于共享合作)(进程间由于共享合作)(进程间由于共享合作)WritingmustbemutuallyexclusiveWritingmustbemutuallyexclusive(对写共享变量必须互斥)(对写共享变量必须互斥)(对写共享变量必须互斥)(对写共享变量必须互
14、斥)CriticalsectionsareusedtoprovidedataintegrityCriticalsectionsareusedtoprovidedataintegrity(确保数据完整性使用临界区)(确保数据完整性使用临界区)(确保数据完整性使用临界区)(确保数据完整性使用临界区)例如:两个数据保持相等:例如:两个数据保持相等:例如:两个数据保持相等:例如:两个数据保持相等:A=BA=B,初始值相等。,初始值相等。,初始值相等。,初始值相等。P1P1:A=A+1A=A+1;B=B+1B=B+1;P2P2:B=2*BB=2*B;A=2*AA=2*A 当当当当P1P1和和和和P2P2
15、顺序执行,能保证一致。但并发执行,就可顺序执行,能保证一致。但并发执行,就可顺序执行,能保证一致。但并发执行,就可顺序执行,能保证一致。但并发执行,就可能出现能出现能出现能出现ABAB,因此必须采用临界资源管理才能达到数据,因此必须采用临界资源管理才能达到数据,因此必须采用临界资源管理才能达到数据,因此必须采用临界资源管理才能达到数据的一致性。的一致性。的一致性。的一致性。CooperationAmongProcessesbyCommunicationCooperationAmongProcessesbyCommunication(进程间由于通信的合作)(进程间由于通信的合作)(进程间由于通信
16、的合作)(进程间由于通信的合作)BecausenothingissharedbetweenprocessesintheactofpassingmessagesMutualexclusionisnotacontrolrequirementMutualexclusionisnotacontrolrequirementforthissortofcooperation.forthissortofcooperation.PossibletohavedeadlockEachprocesswaitingforamessagefromtheEachprocesswaitingforamessagefromth
17、eotherprocessotherprocessPossibletohavestarvationTwoprocessessendingmessagetoeachotherTwoprocessessendingmessagetoeachotherwhileanotherprocesswaitsforamessagewhileanotherprocesswaitsforamessageRequirementsforMutualExclusion(互斥的要求)(互斥的要求)1.Onlyoneprocessatatimeisallowedinthecriticalsectionforaresourc
18、e(一次仅一次仅一次仅一次仅允许一个进程进入临界区允许一个进程进入临界区允许一个进程进入临界区允许一个进程进入临界区)2.Aprocessthathaltsinitsnon-criticalsectionmustdosowithoutinterferingwithotherprocesses(处于非临界区的进程不处于非临界区的进程不处于非临界区的进程不处于非临界区的进程不能干预其它进程能干预其它进程能干预其它进程能干预其它进程)3.NodeadlockorstarvationRequirementsforMutualExclusion(互斥的要求)(互斥的要求)4.Aprocessmustno
19、tbedelayedaccesstoa4.Aprocessmustnotbedelayedaccesstoacriticalsectionwhenthereisnootherprocesscriticalsectionwhenthereisnootherprocessusingit(usingit(当没有进程在临界区时应立即进入当没有进程在临界区时应立即进入当没有进程在临界区时应立即进入当没有进程在临界区时应立即进入)5.Noassumptionsaremadeaboutrelative5.Noassumptionsaremadeaboutrelativeprocessspeedsornumb
20、erofprocessors(processspeedsornumberofprocessors(对相关对相关对相关对相关进程的速度和处理机的数目没有任何要求和限制进程的速度和处理机的数目没有任何要求和限制进程的速度和处理机的数目没有任何要求和限制进程的速度和处理机的数目没有任何要求和限制)6.Aprocessremainsinsideitscriticalsectionfor6.Aprocessremainsinsideitscriticalsectionforafinitetimeonly(afinitetimeonly(一个进程驻留在它的临界区中的一个进程驻留在它的临界区中的一个进程驻留
21、在它的临界区中的一个进程驻留在它的临界区中的时间必须是有限的确时间必须是有限的确时间必须是有限的确时间必须是有限的确)RequirementsforMutualExclusion(互斥的要求)(互斥的要求)空闲让进空闲让进忙则等待忙则等待有限等待有限等待让权等待让权等待ApproachesofMutualExclusion(互斥的方法)(互斥的方法)Software Approaches(软件方法)软件方法)软件方法)软件方法)HardwareSupportSemaphoresMonitorsMessagePassing5.2 Software ApproachesMemoryaccessle
22、velAccesstothesamelocationinmainmemoryareserializedbysomesortofmemoryarbiterDekkersAlgorithmPetersonsAlgorithmDekkersAlgorithm:FirstAttemptBusyWaitingProcessisalwayscheckingtoseeifitcanProcessisalwayscheckingtoseeifitcanenterthecriticalsectionenterthecriticalsectionProcesscandonothingproductiveuntil
23、itProcesscandonothingproductiveuntilitgetspermissiontoenteritscriticalsectiongetspermissiontoenteritscriticalsectionDekkersAlgorithm:FirstAttempt(第(第1种尝试)种尝试)图图图图5.2“5.2“5.2“5.2“爱斯基摩人的小屋协议爱斯基摩人的小屋协议爱斯基摩人的小屋协议爱斯基摩人的小屋协议”(P198P198P198P198)门门门门和和和和小小小小屋屋屋屋很很很很小小小小,每每每每次次次次只只只只能能能能容容容容纳纳纳纳一一一一个个个个人人人人进进
24、进进入入入入,小屋内有一个标志黑板小屋内有一个标志黑板小屋内有一个标志黑板小屋内有一个标志黑板进进进进程程程程申申申申请请请请进进进进入入入入临临临临界界界界区区区区,必必必必须须须须首首首首先先先先进进进进入入入入小小小小屋屋屋屋并并并并检检检检查黑板标志是否是它查黑板标志是否是它查黑板标志是否是它查黑板标志是否是它 是是,离离 开开 小小 屋屋,进进 入入 临临 界界 区区,执执 行行 完完 毕毕,退退 出出 临临 界界 区区,并返回小屋,修改黑板标志为其他进程并返回小屋,修改黑板标志为其他进程 否否,反反复复进进入入小小屋屋,检检查查黑黑板板标标志志,直直到到标标志志是是它它自自己己小黑
25、版指示P1可进varturn:0.1;共享的全局变量共享的全局变量PROCESS0PROCESS1whileturn0donothing;whileturn1donothing;turn:=1;turn:=0;解析解析解析解析 保证了互斥,但存在问题:进程保证了互斥,但存在问题:进程保证了互斥,但存在问题:进程保证了互斥,但存在问题:进程“忙等忙等忙等忙等”进入临界进入临界进入临界进入临界区;若黑板标志修改失败,其他进程区;若黑板标志修改失败,其他进程区;若黑板标志修改失败,其他进程区;若黑板标志修改失败,其他进程永久阻塞永久阻塞永久阻塞永久阻塞DekkersAlgorithmSecondAt
26、tempt(第(第2种尝试)种尝试)EachprocesscanexaminetheothersstatusbutcannotalteritWhenaprocesswantstoenterthecriticalsection,ItcheckstheotherprocessesfirstIfnootherprocessisinthecriticalsection,itsetsitsstatusforthecriticalsection图图 5.3 5.3 每每 个个 人人 有有 一一 个个 自自 己己 的的 小小 屋屋 (P199P199)每每个个人人只只能能检检查查,但但不不能能修修改改其其他
27、他人人的的黑板标志黑板标志若若某某人人申申请请进进入入临临界界区区,首首先先检检查查对对方方黑板是否为黑板是否为“false”“false”是是,修修改改自自己己小小屋屋黑黑板板值值为为“true”“true”,进进入入临临界界区区执执行行,完完毕毕,恢恢复复黑黑板板值值为为“false”“false”否,反复进入小屋,检查黑板标志,直否,反复进入小屋,检查黑板标志,直到标志是到标志是“false”“false”varflag:array0.1ofboolean:false;共共享享全全局局变变量量PROCESS0PROCESS1whileflag1whileflag0donothing;do
28、nothing;flag0:=true;flag1:=true;flag0:=false;flag1:=false;若若进进程程执执行行完完临临界界区区,恢恢复复自自己己标标志志为为“false”“false”失败失败,则其他进程,则其他进程永久阻塞永久阻塞。Thismethoddoesnotguaranteemutualexclusion分析以下执行顺序:分析以下执行顺序:P0P0P0P0:当:当:当:当flag1=false;flag1=false;flag1=false;flag1=false;执行执行执行执行while flag1;while flag1;while flag1;whi
29、le flag1;P1P1P1P1:当:当:当:当flag0=false;flag0=false;flag0=false;flag0=false;执行执行执行执行while flag0;while flag0;while flag0;while flag0;P0P0P0P0:置:置:置:置flag0=true flag0=true flag0=true flag0=true 执行执行执行执行;P1P1P1P1:置:置:置:置flag1=true;flag1=true;flag1=true;flag1=true;执行执行执行执行;DekkersAlgorithmThirdAttempt(第(第3
30、种尝试)种尝试)SetflagtoentercriticalsectionbeforecheckotherprocessesIfanotherprocessisinthecriticalsectionwhentheflagisset,theprocessisblockeduntiltheotherprocessreleasesthecriticalsectionvarflag:array0.1ofboolean:false;共享的全局变量共享的全局变量PROCESS0PROCESS1flag0:=true;flag1:=true;whileflag1whileflag0donothing;do
31、nothing;flag0:=false;flag1:=false;解解析析:如如果果两两个个进进程程在在执执行行while之之前前都都把把flag设设置置成成true,那那么么每每个个进进程程都都会会以以为为对对方方进进入入了了临临界界区区,使使自自己己处于阻塞,从而导致死锁。处于阻塞,从而导致死锁。首先设标志DekkersAlgorithmFourthAttempt(第(第4种尝试)种尝试)AprocesssetsitsflagtoindicateitsdesiretoenteritscriticalsectionbutispreparedtoresettheflagOtherproces
32、sesarechecked.Iftheyareinthecriticalregion,theflagisresetandlatersettoindicatedesiretoenterthecriticalregion.Thisisrepeateduntiltheprocesscanenterthecriticalregion.varflag:array0.1ofboolean:false;共享的全局变量共享的全局变量PROCESS0PROCESS1flag0:=true;flag1:=true;whileflag1dowhileflag0dobeginbeginflag0:=false;fla
33、g1:=false;flag0:=true;flag1:=true;end;end;flag0:=false;flag1:=false;重置标志 试按以下顺序执行:试按以下顺序执行:试按以下顺序执行:试按以下顺序执行:P0P0:置:置:置:置flag0=true;flag0=true;P1P1:置:置:置:置flag1=true;flag1=true;P0P0:执行:执行:执行:执行whileflag1;whileflag1;P1P1:执行:执行:执行:执行whileflag0;whileflag0;P0P0:置:置:置:置flag0=false;flag0=false;P1P1:置:置:置:
34、置flag1=false;flag1=false;P0P0:置:置:置:置flag0=true;flag0=true;P1P1:置:置:置:置flag1=true;flag1=true;解析:检查其它进程,然后重置,再检查,再重置解析:检查其它进程,然后重置,再检查,再重置解析:检查其它进程,然后重置,再检查,再重置解析:检查其它进程,然后重置,再检查,再重置,重重重重置置置置序序序序列列列列可可可可以以以以无无无无线线线线延延延延伸伸伸伸,任任任任何何何何一一一一个个个个进进进进程程程程都都都都不不不不能能能能进进进进入入入入自自自自己己己己的临界区。的临界区。的临界区。的临界区。(这种现象
35、称为这种现象称为这种现象称为这种现象称为:互斥礼让互斥礼让互斥礼让互斥礼让)DekkersAlgorithm:CorrectSolution为了解决为了解决为了解决为了解决“互斥礼让互斥礼让互斥礼让互斥礼让”问题问题问题问题,给出给出给出给出:DekkersAlgorithm:CorrectSolution该算法的主要思想是该算法的主要思想是该算法的主要思想是该算法的主要思想是:需要两个变量需要两个变量需要两个变量需要两个变量:1.turn:1.turn:指出应该哪一个进入指出应该哪一个进入指出应该哪一个进入指出应该哪一个进入thecriticalsectionthecriticalsecti
36、onturn=0turn=0表示表示表示表示P0P0可以进入可以进入可以进入可以进入turn=1turn=1表示表示表示表示P1P1可以进入可以进入可以进入可以进入2.Flag:2.Flag:指出当前哪一个在临界区指出当前哪一个在临界区指出当前哪一个在临界区指出当前哪一个在临界区Flag=0Flag=0表示表示表示表示P0P0当前在临界区当前在临界区当前在临界区当前在临界区Flag=1Flag=1表示表示表示表示P1P1当前在临界区当前在临界区当前在临界区当前在临界区图图图图5.45.45.45.4增加一个带准许进入临界区标志的小屋增加一个带准许进入临界区标志的小屋增加一个带准许进入临界区标志
37、的小屋增加一个带准许进入临界区标志的小屋 指示P0可以进入临界区代码描述(代码描述(P203,P203,图图5.55.5)varflag:array0.1ofboolean;turn:0.1;/准许进入临界区标志变量准许进入临界区标志变量beginflag0:=false;flag1:=false;turn:1;/设P1进程在临界区parbeginp0;p1;parendendprocedureP0;Beginrepeatflag0:true;/初值为真,P0希望进入临界区。whileflag1do/查P1进程标志ifturn=1then/turn为1,表明P1进程在临界区beginflag0
38、:=false;whileturn=1/当turn=0,表明P0进程可以进入临界区donothing;flag0:true;/设标志为真,P0进入临界区end;criticalsection;turn:=1;/指定P1进程可进临界区flag0:false;remainderforeverendprocedureP1;beginrepeatflag1:=true;whileflag0doifturn=0thenbeginflag1:false;whileturn0donothing;flag1:trueend;criticalsection;turn:0;flag1:false;forevere
39、nd解析(解析(分析分析分析分析P0P0P0P0的执行)的执行)的执行)的执行)1.置flag0:=true;2.执行whileflag1语句有两种情况:(1)当flag1=false,P0进入临界区,执行完成,置turn:=1;flag0:=false;(2)当flag1=true,检查turn的值,turn的值又有两种情况:turn=1P0忙等turn=0P1已退出(但还未修改flag的值),P0立即进入PetersonsAlgorithm提提提提出出出出简简简简单单单单的的的的互互互互斥斥斥斥方方方方案案案案:turnturnturnturn解解解解决决决决同同同同时时时时的的的的冲冲冲
40、冲突突突突,FlagFlagFlagFlag指指指指示示示示进进进进程程程程是是是是否否否否在在在在临临临临界界界界区区区区。对对对对两两两两参参参参量量量量同同同同时时时时控控控控制,交替进入临界区执行。制,交替进入临界区执行。制,交替进入临界区执行。制,交替进入临界区执行。代码描述(图代码描述(图代码描述(图代码描述(图5.65.65.65.6,P204P204P204P204)解析:解析:解析:解析:分析分析分析分析P0P0P0P0的执行:的执行:的执行:的执行:1.1.1.1.置置置置flag0:=true;flag0:=true;flag0:=true;flag0:=true;阻止阻
41、止阻止阻止P1P1P1P1进入临界区进入临界区进入临界区进入临界区 2.2.2.2.执行执行执行执行while flag1while flag1while flag1while flag1 当当当当flag1=flag1=flag1=flag1=falsefalsefalsefalse时时时时,P0,P0,P0,P0进进进进 入入入入,执执执执 行行行行 完完完完 成成成成,置置置置flag0:=false;flag0:=false;flag0:=false;flag0:=false;当当当当flag1=trueflag1=trueflag1=trueflag1=true时时时时,P0,P0,
42、P0,P0阻塞,等待阻塞,等待阻塞,等待阻塞,等待P1P1P1P1退出退出退出退出varflag:array0.1ofboolean;turn:0.1;beginflag0:false;flag1:false;turn:=1;/假设P1进程可先进临界区parbeginP0;P1;/见下页parendendFigure5.6PetersonsAlgorithmforTwoProcessesprocedureP0;beginrepeatflag0:=true;/P0进程希望进临界区turn:1;whileflag1andturn1donothing;criticalsection;flag0:=f
43、alse;foreverend;procedureP1;beginrepeat flag1:=true;turn:0;whileflag0andturn=0donothing;flag1:=false;remainderforeverend;ApproachesofMutualExclusionSoftwareApproachesHardware SupportSemaphoresMonitorsMessagePassing5.3MutualExclusion:HardwareSupport(互斥:硬件支持)(互斥:硬件支持)InterruptDisabling(中断屏蔽)(中断屏蔽)Apro
44、cessrunsuntilitinvokesanoperating-Aprocessrunsuntilitinvokesanoperating-systemserviceoruntilitisinterruptedsystemserviceoruntilitisinterrupted(进程运行到它调用系统服务或被中断为止)(进程运行到它调用系统服务或被中断为止)(进程运行到它调用系统服务或被中断为止)(进程运行到它调用系统服务或被中断为止)DisablinginterruptsguaranteesmutualDisablinginterruptsguaranteesmutualexclusio
45、nexclusion(屏蔽中断以确保互斥)(屏蔽中断以确保互斥)(屏蔽中断以确保互斥)(屏蔽中断以确保互斥)Multiprocessor(Multiprocessor(在多处理机中在多处理机中在多处理机中在多处理机中)disablinginterruptsononeprocessorwilldisablinginterruptsononeprocessorwillnotguaranteemutualexclusionnotguaranteemutualexclusion实现互斥的过程While(true)/*屏蔽中断*/*临界区*/*启用中断*/*其余部分*/SpecialMachineIns
46、tructions(专门的机器指令)在一个多处理器配置中,几个处理器共享访问一个公共的主存。在这种情况下,不存在主从关系,处理器的间行为是无关的,表现出一种对等关系,处理器之间没有支持互斥的中断机制。处理器的设计者提出了一些机器指令,用于保证两个动作的原子性。如在一个取指令周期中对一个存储器单元的读和写,或者读和测试。由于这些动作在一个指令周期中执行,它们不会受到其他指令的干扰。两种最常见的指令描述如下:两种最常见的指令描述如下:1.TestandSetInstructionTestandSetInstructionfunctiontestset(vari:integer):boolean;f
47、unctiontestset(vari:integer):boolean;beginbeginifi=0thenifi=0thenbeginbegini:=1;i:=1;testset:=true;testset:=true;endendelsetestset:=false;elsetestset:=false;end.end.例如:例如:例如:例如:Figure5.7a(p206)Figure5.7a(p206)programmutualexclusion;constn.;(*numberofprocesses*);varbolt:integer;procedurePO(i:integer)
48、;beginrepeatrepeatnothinguntiltestset(bolt);当bolt为0时,进入临界区,;bolt:0;foreverend;begin(*mainprogram*)bolt:=0;parbeginP(1);P(2);.P(n);parendend(a)TestandSetInstruction2.ExchangeInstructionprocedureexchange(procedureexchange(varr:register;varm:memory);varr:register;varm:memory);vartemp;begintemp:=m;m:=r;
49、r:=temp;end.例如:例如:例如:例如:Figure5.7b(p206)Figure5.7b(p206)programmutualexclusion;constn=.;(*numberofprocesses);varbolt:integer;procedureP(i:integer);varkeyi:integer;beginrepeatkeyi:1;repeatexchange(keyi,bolt)untilkeyi=0;criticalsection;exchange(keyi,bolt);remainderforeverend;begin(*mainprogram*)bolt:0
50、;parbeginP(1);P(2);.P(n);parendend.(b)ExchangeIntructionAdvantagesofMachineInstructionsAdvantagesofMachineInstructions(机器指令的优点机器指令的优点机器指令的优点机器指令的优点)ApplicabletoanynumberofprocessesoneitherApplicabletoanynumberofprocessesoneitherasingleprocessorormultipleprocessorssharingasingleprocessorormultiplepro