分享
 
 
 

Lamport

王朝百科·作者佚名  2010-04-10
窄屏简体版  字體: |||超大  

Lamport算法:又称面包房算法,先来先服务算法。跟很多银行采用的排队机制一样。客户到了银行,先领取一个服务号。一旦某个窗口出现空闲,拥有最小服务号的客户就可以去空闲窗口办理业务。

Lamport算法利用前述的事件定序方案统一定序所有对临界段的请求,按先来先服务的原则让请求临界资源的进程进入其临界段,进/出临界段1次需要3×(n-1)条消息。

Lamport算法基本假定如下:

A. 进程Pi发送的请求消息形如request(Ti , i),其中Ti = Ci是进程Pi发送此消息时对应的逻辑时钟值,i代表消息内容。

B.每个进程保持一个请求队列,队列中的请求消息根据Þ关系定序,队列初始为空。

Lamport算法描述

当进程Pi请求资源时,它把请求消息request(Ti , i)排在自己的请求队列中,同时也把该消息发送给系统中的其他进程; 当进程Pj接收到外来消息request(Ti , i)后,发送回答消息reply(Tj , j),并把request(Ti , i)放入自己的请求队列。应当说明,若进程Pj在收到request(Ti , i)前已提出过对同一资源的访问请求,那么其时间戳应比(Ti , i)小。 若满足下述两条件,则允许进程Pi访问该资源(即允许进入临界段):

A. Pi自身请求访问该资源的消息已处于请求队列的最前面;

B. Pi已收到从所有其他进程发来的回答消息,这些回答消息的时间戳均晚于(Ti, i). 为了释放该资源,Pi从自己的队列中撤销请求消息,并发送一个打上时间戳的释放消息release给其他进程;

当进程Pj收到Pi的release消息后,它撤销自己队列中的原Pi的request(Ti , i)消息。

下面是我写的代码

procedure Procesus is

type MsgTypes is (REQUETE, QUITTANCE, LIBERE);

task TacheUsager;

task ExcluionMutuelle is

entry demande;

entry attente;

entry fin;

entry recoit(msgType : in MsgType; estampille, emetteur : in integer);

end ExcluionMutuelle;

task body TacheUsager is

begin

ExclusionMutuelle.demande;

ExclusionMutuelle.attente;

ExclusionMutuelle.fin;

....

....

end TacheUsager;

task body ExclusionMutuelle is

me: constant := ...;

N : constant := ...;

Time_Logique : integer:= 0;

scAccorde : boolean := false;

type t_file is record

msgType : msgTypes := LIBERE;

estampille : integer := 0;

end record;

file array (1..N) if t_file;

function Permission (me : in integer) return boolean is

accord : boolean := true;

begin

for j in 1..N loop

if j/= me then

accord := accord and (file(me).estampille < file(j).estampille) or (file(me).estampille = file(j).estampille and me < j);

end if;

end loop;

return accord;

end Permission;

begin -- ExclusionMutuelle

loop

select

accept demande;

Time_Logique := Time_Logique +1;

file(me) := (REQUETE, Time_Logique);

for j in 1..N loop

if j/= me then sent((REQUETE, Time_Logique, me),j);

end if;

end loop;

scAccorde := Permission(me);

or

when scAccorde => accept attente;

or

when seAccorde => accept fin;

file(me):= (LIBERE, Time_Logique);

for j in 1..N loop

if j/= me then sent((LIBERE, Time_Logique, me) j);

end if

end loop;

scAccord := false;

or

accept recoit(msgType : in MsgTypes; estampille, emetteur : in integer) do

Time_Logique := integer'max(Time_Logique, estampille) + 1;

case msyType is

when REQUETE => file(emetteur) := (REQUETE, estampille);

sent((QUITTANCE, Time_Logoque, me), emetteur);

when LIBERE => file(emetteur) := (LIBERE, estampille);

when QUITTANCE => if file(emetteur).msgType /= REQUETE then

file(emetteur) := (QUITTANCE, estampille);

end if

end case;

scAccorde := file(me).msgType = REQUETE and then Permission(me);

end recoit;

end select;

end loop;

end ExclusionMutuelle;

end Processus;

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有