互斥工具-软件方式

互斥工具-软件方式

ID:38706742

大小:579.00 KB

页数:25页

时间:2019-06-18

互斥工具-软件方式_第1页
互斥工具-软件方式_第2页
互斥工具-软件方式_第3页
互斥工具-软件方式_第4页
互斥工具-软件方式_第5页
资源描述:

《互斥工具-软件方式》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Part1软件互斥Dekker算法1booleanflag[2];2intturn;3voidP0()4{5while(true)6{7flag[0]=true;8while(flag[1])9if(turn==1)10{11flag[0]=false;12while(turn==1)13/*什么也不做*/14flag[0]=true;15}16临界区17turn=1;18flag[0]=false;19其余部分20}21}Peterson算法1booleanflag[2]={false,false};2intturn;

2、3voidP0()4{5while(true)6{7flag[0]=true;8turn=1;9while(flag[1]&&turn==1)10/*什么也不做*/;11临界区12flag[0]=false;13/*其余部分*/;14}15}16voidP1()17{18while(true)19{20flag[1]=true;21turn=0;22while(flag[0]&&turn==0)23/*什么也不做*/;24临界区25flag[1]=false;26/*其余部分*/;27}28}Part2硬件互斥Tests

3、et指令1booleantestset(inti)/*实现何种功能*/2{3if(i==0)4{5i=16returntrue7}8else9returnfalse10}11constintn=/*进程*/12intboltbolt=0testset(bolt)=truebolt=1进入临界区此时标志位bolt=1当占用资源结束bolt=0允许其它进程占有临界资源13voidP(inti)14{15while(1)16{17while(!testset(bolt))18/*什么也不做*/;19临界区20bolt=021/

4、*其余部分*/;22}23}24Voidmain()25{26bolt=027parbegin(P(1),P(2),…,P(n));28}exchange指令1voidexchange(intregister,intmemory)/*实现何种功能*/2{3inttemp4temp=memory5memory=register6register=temp7}8constintn=/*进程*/9intbolt10voidP(inti)11{进程1:keyi=1bolt=0(资源未被占用)通过17行程序:exchange(ke

5、yi,bolt)keyi=0bolt=1(资源已被占用)进程2:keyi=1bolt=1通过17行程序:exchange(keyi,bolt)keyi=1bolt=1等待bolt=0才可以占用资源12intkeyi13while(1)14{15keyi=116while(keyi!=0)17exchange(keyi,bolt)18临界区19exchange(keyi,bolt)20/*其余部分*/;21}22}23voidmain()24{25bolt=026parbegin(P(1),P(2),…,P(n))27}P

6、(Wait)操作/*申请一个资源*/1P(S)2{3S--4ifS<05block()6}V(Signal)操作/*释放一个资源*/7V(S)8{9S++10ifS<=011wakeup()12}P(S)临界区V(S)输入进程P1P(S1)读信息到缓冲区BV(S2)输出进程P2P(S2)从缓冲区B读出信息V(S1)如何设置S1,S2的初值,才能保证进程P1,P2同步进行?生产者消费者问题1semaphoremutex=1,empty=n,full=02inti=j=03itembuffer[n]4voidproducer

7、()5{6while(1)7{8producenextproduct9P(empty)10P(mutex)11buffer[i]=product12i=i+1%n13V(mutex)14V(full)15}16}17voidconsumer()18{19while(1)20{21P(full)22P(mutex)23product=buffer[j]24j=(j+1)%n25V(mutex)26V(empty)27consumetheproduct28}29}30voidmain()31{32parbegin(produ

8、cer(),consumer())33}读者写者问题(见PPT)哲学家进餐问题Originalprocessing:#defineN51voidphilosopher(inti)2{3while(true)4{5thinking6takefork[i]7takefork[(i+1)%5]8eating9putdown

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。