Ds Assignment 3

7
Assignment-3 Ques- Simulate the Distributed Mutual Exclusion import Utilities.*; import Synchronization.*; class Message { public int number,id; public Message(int number, int id) { this.number=number; this.id=id; }} class Node extends MyObject implements Runnable { private static final int MAIN =0, REQUESTS=1, REPLIES=2; private int whichone=0; private int numNodes=-1; private int napOutsideCS=0; private int napInsideCS=0; private MessagePassing[] requestChannel=null; private MessagePassing[] relyChannel=null; private MessagePassing[] requestsToMe=null; private MessagePassing[] repliesToMe=null; private int number =0; private boolean requesting = false; private int replyCount=0; private BinarySemaphore s=new BinarySemaphore (1) ; private BinarySemaphore wakeUp=new BinarySemaphore (0) ; private boolean[] deferred = null; public Node(String name, int id, int numNodes,int napOutsideCS, int napInsideCS, MessagePassing[] requestChannel,MessagePassing replytChannel[],MessagePassing requestsToMe,MessagePassing repliesToMe) { super (name + "" + id); this.id=id; this.numNodes=numNodes; this.napOutsideCS=napOutsideCS; this.napInsideCS=napInsideCS; this.requestChannel=requestChannel; this.relyChannel=relyChannel; this.requestsToMe=requestsToMe; this.repliesToMe=repliesToMe; deferred=new boolean[numNodes]; for(int i=0;i< numNodes; i++) deferred[i]=false;

description

Ds Assignment 3

Transcript of Ds Assignment 3

Assignment-3Ques- Simulate the Distributed Mutual Exclusion import Utilities.*;import Synchronization.*;class Message { public int number,id;public Message(int number, int id){this.number=number;this.id=id;

class !ode e"tends My#b$ect implements %unnable{pri&ate static 'inal int M()! =*, %+,U+S-S=., %+/0)+S=1;pri&ate int 2hichone=*;pri&ate int num!odes=3.;pri&ate int nap#utside4S=*;pri&ate int nap)nside4S=*;pri&ate Message/assing56 re7uest4hannel=null;pri&ate Message/assing56 rely4hannel=null;pri&ate Message/assing56 re7uests-oMe=null;pri&ate Message/assing56 replies-oMe=null;pri&ate int number =*;pri&ate boolean re7uesting = 'alse;pri&ate int reply4ount=*;pri&ate 8inarySemaphore s=ne2 8inarySemaphore (.) ;pri&ate 8inarySemaphore 2a9eUp=ne2 8inarySemaphore (*) ;pri&ate boolean56 de'erred = null;public !ode(String name, int id, int num!odes,int nap#utside4S, int nap)nside4S, Message/assing56 re7uest4hannel,Message/assing replyt4hannel56,Message/assing re7uests-oMe,Message/assing replies-oMe){super (name : ;; : id);this.id=id;this.num!odes=num!odes;this.nap#utside4S=nap#utside4S;this.nap)nside4S=nap)nside4S;this.re7uest4hannel=re7uest4hannel;this.rely4hannel=rely4hannel;this.re7uests-oMe=re7uests-oMe;this.replies-oMe=replies-oMe;de'erred=ne2 boolean5num!odes6;'or(int i=*;i< num!odes; i::) de'erred5i6='alse;System.out.println(get!mae() :; is ali&e, nap#utside4S=; : nap#utside4S : ;,nap)nside4S=; : nap)nside4S);ne2 -hread(this).start();

public &oid run(){ int me=# = 2hich#ne::; i'(me=o==M()!){ ne2 -hread(this).start();main();

else i'(me=o == %+,U+S-S){ne2 -hread(this).start();handle%e7uests();

else i'(me=o == %+/0)+S){handle%eplies();

pri&ate &oid choose!umber(){/(s);re7uesting=true;number=high!umber :.;>(s);

pri&ate &oid send%e7uest(){reply4ount =*;'or(int $=*; $ < num!odes; $::)i'($?=id)send(re7uest4hannel5$6, ne2 Message(number,id));

pri&ate &oid 2ait@or%eply(){/(2a9eUp);

pri&ate &oid reply-o=e'erred!odes(){/(s);re7uesting = 'alse;>(s);'or(int $ =*; $< num!odes; $::){i'(de'erred5$6){de'erred5$6='alse;send(reply4hannel5$6,id);

pri&ate &oid outside4S(){int napping;napping=((int) random(nap#utside4S)) :.;System.out.println(;age()=; : age() : ;, ; : get!ame() : ; napping outside 4S 'or ; : napping : ; ms ;);nap(napping);

pri&ate &oid inside4S(){int napping;napping =((int) random(nap)nside4S)) :. ;System.out.println(;age=(); : age() : ;, ; : get!ame() : ; napping inside 4S 'or ; : napping : ; ms;);nap(napping);

pri&ate &oid main(){2hile(true){outside4S();System.out.println(;age()=; : age() : ;, node ; : id : ; 2ants to enter its critical section;);chose!umber();send%e7uest();2ait@or%eply();inside4S();System.out.println(;age()=; :age() : ;, node ; : id : ; has no2 le't its critical section;);reply-o=e'erred!odes();

pri&ate &oid handle%e7uests(){2hile(true){message m = (message) recei&e(re7uests-oMe);int recei&ed!umber = m.number;int recei&ed)= = m.id;high!umber=Math.ma"(high!umber, recei&ed!umber);/(s);boolean decide-o=e'er=re7uesting AA (number < recei&ed!umber BB (number == recei&ed!umber AA id < recei&ed)=));i' (decide-o=e'er) de'erred5recei&ed)=6 = true;else send(reply4hannel5recei&ed)=6,id);>(s);pri&ate &oid handle%eplies(){2hile(true){int recei&ed)==recei&e)nt(replies-oMe);reply4ount::;i'(reply4ount==num!odes 3 .)>(2a9eUp); class =istributedMutual+"clusion e"tends My#b$ect{public static &oid main(String56 args){Cet#pt go= ne2 Cet#pt(args, ;UnD%D;);String usage = ;UsageD 3n num!odes 3% run-ime; : ; nap#utside4S5i6 nap)nside4S5i6 i=*,.,...;;go.opt+rr = true;int ch = 3.;int num!odes =E;int run-ime = F*;2hile ((ch = go.getopt()) ?= go.opt+#@){i' ((char)ch == GUG){System.out.println (usage); System.e"it(*);

else i' ((char) ch == GnG)num!odes=go.process(rg(go.opt(rgCet(), num!odes);else i' ((char) ch == G%G)run-ime = go.process(rg(go.opt(rgCet(), run-ime);else{System.err.println(usage);System.e"it(.);

System.out.println(;=istributeMutual+"clusionD num!odes=; : num!odes : ;,run-ime=; : run-ime);int56 nap#utside4S = ne2 int5num!odes6;int56 nap)nside4S = ne2 int5num!odes6;int arg!um = go.opt)nde"Cet();'or(int i = *; i < num!odes; )::){nap#utside4S5i6 = go.try(rg(arg!um::, H);nap)nside4S5i6 = go.try(rg(arg!um::, 1);

Message/assing56 re7uest4hannel =null, reply4hannel = null,re7uest4hannelS =null,re7uest4hannel% =null,reply4hannelS = null,reply4hannel% = null;re7uest4hannel= ne2 Message/assing5num!odes6;reply4hannel= ne2 Message/assing5num!odes6;re7uest4hannelS = ne2 Message/assing5num!odes6;reply4hannelS = ne2 Message/assing5num!odes6;re7uest4hannel% = ne2 Message/assing5num!odes6;reply4hannel% = ne2 Message/assing5num!odes6;'or(int i=*; i< num!odes; i::){re7uest4hannel5i6 = ne2 (syncMessage/assing();reply4hannel5i6 = ne2 (syncMessage/assing();re7uest4hannelS 5i6 = ne2 (syncMessage/assing();reply4hannelS 5i6 = ne2 (syncMessage/assing();re7uest4hannel% 5i6 = ne2 Message/assing%ecei&eonly(re7uest4hannel 5i6);reply4hannel% 5i6 = ne2 Message/assing%ecei&eonly(reply4hannel 5i6);

'or(int i=*; ijavac dimu.javaC:\Documents and Settings\admin>java DistributedMutualExclusion R2