-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRA.dis
More file actions
72 lines (57 loc) · 1.58 KB
/
Copy pathRA.dis
File metadata and controls
72 lines (57 loc) · 1.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import random
class P(DistProcess):
def setup(ps, requests):
reqc = None
s = ps
waiting = set()
replied = set()
def cs(task):
# to enter cs, enque and send request to all, then await replies from all
--start
reqc = logical_clock()
send(Request(reqc), s)
--reply
await(len(replied) == len(s))
# critical section
--cs
task()
# to exit cs, deque and send releases to all
--release
reqc = None
output("Is releasing.")
send(Reply(logical_clock()), waiting)
--end
waiting = set()
replied = set()
def main():
def anounce():
output("In cs!")
while True:
cs(anounce)
# when receiving requests from others, enque and reply
def OnRequest():
if (reqc == None or (_timestamp, _source) < (reqc, self)):
send(Reply(logical_clock()), _source)
else:
waiting.add(_source)
def OnReply(lc):
if reqc != None and lc > reqc: replied.add(_source)
def main():
# create n process
ps = createprocs(P,int(sys.argv[1]))
proc = int(sys.argv[1])
req = int(sys.argv[2])
assign = [0]*proc
time.sleep(5)
while req:
j = random.randrange(0, proc)
assign[j]+=1
req=req-1
# setup the processes
j=0
for p in ps:
setupprocs([p], [ps-{p}])
j=j+1
time.sleep(5)
startprocs(ps)
time.sleep(5)