-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest.act
More file actions
121 lines (103 loc) · 1.82 KB
/
test.act
File metadata and controls
121 lines (103 loc) · 1.82 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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
actor BufferManager(4) {
knownactors {
Producer producer;
Consumer consumer;
}
actorvars {
boolean empty;
boolean full;
boolean producerWaiting;
boolean consumerWaiting;
int bufferLength;
int nextProduce;
int nextConsume;
}
msghandler initial() {
bufferLength = 5;
empty = true;
full = false;
producerWaiting = false;
consumerWaiting = false;
nextProduce = 0;
nextConsume = 0;
}
msghandler giveMeNextProduce() {
if (!full) {
producer.produce();
}
else {
producerWaiting = true;
}
}
msghandler giveMeNextConsume() {
if (!empty) {
consumer.consume();
}
else {
consumerWaiting = true;
}
}
msghandler ackProduce() {
nextProduce = (nextProduce + 1) % bufferLength;
if (nextProduce == nextConsume) {
full = true;
}
empty = false;
if (consumerWaiting) {
consumer.consume();
consumerWaiting = false;
}
}
msghandler ackConsume() {
nextConsume = (nextConsume + 1) % bufferLength;
if (nextConsume == nextProduce) {
empty = true;
}
full = false;
if (producerWaiting) {
producer.produce();
producerWaiting = false;
}
}
}
actor Producer(2) {
knownactors {
BufferManager buffer;
}
actorvars {
}
msghandler initial() {
self.beginProduce();
}
msghandler produce() {
print("producer is producing");
buffer.ackProduce();
self.beginProduce();
}
msghandler beginProduce() {
buffer.giveMeNextProduce();
}
}
actor Consumer(2) {
knownactors {
BufferManager buffer;
}
actorvars {
}
msghandler initial() {
self.beginConsume();
}
msghandler consume() {
print("consumer is consuming");
buffer.ackConsume();
self.beginConsume();
}
msghandler beginConsume() {
buffer.giveMeNextConsume();
}
}
main {
BufferManager buffer(producer, consumer):();
Producer producer(buffer):();
Consumer consumer(buffer):();
}