@@ -155,164 +155,128 @@ <h3>The Problem</h3>
155155sequenceDiagram
156156 philosopher_2-> > philosopher_2: {:start_hungry, :fork_2, :fork_0}
157157 Note over philosopher_2,philosopher_2: t=200ms
158- philosopher_1-> > philosopher_1: {:start_hungry, :fork_2, :fork_1}
159- Note over philosopher_1,philosopher_1: t=200ms
160- philosopher_0-> > philosopher_0: {:start_hungry, :fork_0, :fork_1}
161- Note over philosopher_0,philosopher_0: t=200ms
162158 philosopher_2-> > philosopher_2: {:mumble, "I'm hungry!"}
163159 Note over philosopher_2,philosopher_2: t=200ms
164- philosopher_1-> > philosopher_1: {:mumble, "I'm hungry!"}
165- Note over philosopher_1,philosopher_1: t=200ms
166- philosopher_0-> > philosopher_0: {:mumble, "I'm hungry!"}
167- Note over philosopher_0,philosopher_0: t=200ms
168160 philosopher_2-> > fork_2: {:request_fork, :philosopher_2}
169161 Note over philosopher_2,fork_2: t=200ms
170- philosopher_1-> > fork_2: {:request_fork, :philosopher_1}
171- Note over philosopher_1,fork_2: t=200ms
172- philosopher_0-> > fork_0: {:request_fork, :philosopher_0}
173- Note over philosopher_0,fork_0: t=200ms
174162 fork_2-> > philosopher_2: {:fork_granted, :fork_2}
175163 Note over fork_2,philosopher_2: t=200ms
176- fork_0 -> > philosopher_0 : {:fork_granted , :fork_0 }
177- Note over fork_0,philosopher_0 : t=200ms
178- fork_2 -> > philosopher_1 : {:fork_denied , :fork_2 }
179- Note over fork_2,philosopher_1 : t=200ms
164+ philosopher_1 -> > philosopher_1 : {:start_hungry , :fork_2, :fork_1 }
165+ Note over philosopher_1,philosopher_1 : t=200ms
166+ philosopher_0 -> > philosopher_0 : {:start_hungry , :fork_0, :fork_1 }
167+ Note over philosopher_0,philosopher_0 : t=200ms
180168 philosopher_2-> > fork_0: {:request_fork, :philosopher_2}
181169 Note over philosopher_2,fork_0: t=200ms
182- philosopher_0-> > fork_1: {:request_fork, :philosopher_0}
183- Note over philosopher_0,fork_1: t=200ms
184- fork_0-> > philosopher_2: {:fork_denied, :fork_0}
185- Note over fork_0,philosopher_2: t=200ms
186- fork_1-> > philosopher_0: {:fork_granted, :fork_1}
187- Note over fork_1,philosopher_0: t=200ms
188- philosopher_2-> > fork_2: {:release_fork, :philosopher_2}
189- Note over philosopher_2,fork_2: t=200ms
190- philosopher_0-> > philosopher_0: {:mumble, "I'm full!"}
191- Note over philosopher_0,philosopher_0: t=300ms
192- philosopher_0-> > fork_0: {:release_fork, :philosopher_0}
193- Note over philosopher_0,fork_0: t=300ms
194- philosopher_0-> > fork_1: {:release_fork, :philosopher_0}
195- Note over philosopher_0,fork_1: t=300ms
170+ philosopher_0-> > philosopher_0: {:mumble, "I'm hungry!"}
171+ Note over philosopher_0,philosopher_0: t=200ms
172+ philosopher_0-> > fork_0: {:request_fork, :philosopher_0}
173+ Note over philosopher_0,fork_0: t=200ms
174+ philosopher_1-> > philosopher_1: {:mumble, "I'm hungry!"}
175+ Note over philosopher_1,philosopher_1: t=200ms
176+ philosopher_1-> > fork_2: {:request_fork, :philosopher_1}
177+ Note over philosopher_1,fork_2: t=200ms
178+ fork_0-> > philosopher_2: {:fork_granted, :fork_0}
179+ Note over fork_0,philosopher_2: t=400ms
196180 philosopher_0-> > philosopher_0: {:start_hungry, :fork_0, :fork_1}
197181 Note over philosopher_0,philosopher_0: t=400ms
198182 philosopher_1-> > philosopher_1: {:start_hungry, :fork_2, :fork_1}
199183 Note over philosopher_1,philosopher_1: t=400ms
184+ fork_0-> > philosopher_0: {:fork_denied, :fork_0}
185+ Note over fork_0,philosopher_0: t=400ms
186+ philosopher_2-> > philosopher_2: {:start_hungry, :fork_2, :fork_0}
187+ Note over philosopher_2,philosopher_2: t=400ms
188+ fork_2-> > philosopher_1: {:fork_denied, :fork_2}
189+ Note over fork_2,philosopher_1: t=400ms
200190 philosopher_0-> > fork_0: {:request_fork, :philosopher_0}
201191 Note over philosopher_0,fork_0: t=400ms
202192 philosopher_1-> > fork_2: {:request_fork, :philosopher_1}
203193 Note over philosopher_1,fork_2: t=400ms
204- philosopher_2 -> > philosopher_2 : {:start_hungry, :fork_2 , :fork_0}
205- Note over philosopher_2,philosopher_2 : t=400ms
194+ fork_0 -> > philosopher_0 : {:fork_denied , :fork_0}
195+ Note over fork_0,philosopher_0 : t=400ms
206196 philosopher_2-> > fork_2: {:request_fork, :philosopher_2}
207197 Note over philosopher_2,fork_2: t=400ms
208- fork_0-> > philosopher_0: {:fork_granted, :fork_0}
209- Note over fork_0,philosopher_0: t=400ms
210- fork_2-> > philosopher_1: {:fork_granted, :fork_2}
198+ fork_2-> > philosopher_1: {:fork_denied, :fork_2}
211199 Note over fork_2,philosopher_1: t=400ms
212- fork_2-> > philosopher_2: {:fork_denied, :fork_2}
213- Note over fork_2,philosopher_2: t=400ms
214- philosopher_0-> > fork_1: {:request_fork, :philosopher_0}
215- Note over philosopher_0,fork_1: t=400ms
216- philosopher_1-> > fork_1: {:request_fork, :philosopher_1}
217- Note over philosopher_1,fork_1: t=400ms
218- fork_1-> > philosopher_0: {:fork_granted, :fork_1}
219- Note over fork_1,philosopher_0: t=400ms
220- fork_1-> > philosopher_1: {:fork_denied, :fork_1}
221- Note over fork_1,philosopher_1: t=400ms
222- philosopher_1-> > fork_2: {:release_fork, :philosopher_1}
223- Note over philosopher_1,fork_2: t=400ms
224- philosopher_0-> > philosopher_0: {:mumble, "I'm full!"}
225- Note over philosopher_0,philosopher_0: t=500ms
226- philosopher_0-> > fork_0: {:release_fork, :philosopher_0}
227- Note over philosopher_0,fork_0: t=500ms
228- philosopher_0-> > fork_1: {:release_fork, :philosopher_0}
229- Note over philosopher_0,fork_1: t=500ms
200+ philosopher_2-> > philosopher_2: {:mumble, "I'm full!"}
201+ Note over philosopher_2,philosopher_2: t=500ms
202+ philosopher_2-> > fork_2: {:release_fork, :philosopher_2}
203+ Note over philosopher_2,fork_2: t=500ms
204+ philosopher_2-> > fork_0: {:release_fork, :philosopher_2}
205+ Note over philosopher_2,fork_0: t=500ms
230206 philosopher_2-> > philosopher_2: {:start_hungry, :fork_2, :fork_0}
231207 Note over philosopher_2,philosopher_2: t=600ms
232208 philosopher_1-> > philosopher_1: {:start_hungry, :fork_2, :fork_1}
233209 Note over philosopher_1,philosopher_1: t=600ms
210+ philosopher_2-> > fork_2: {:request_fork, :philosopher_2}
211+ Note over philosopher_2,fork_2: t=600ms
212+ philosopher_1-> > fork_2: {:request_fork, :philosopher_1}
213+ Note over philosopher_1,fork_2: t=600ms
234214 philosopher_0-> > philosopher_0: {:start_hungry, :fork_0, :fork_1}
235215 Note over philosopher_0,philosopher_0: t=600ms
236216 philosopher_0-> > fork_0: {:request_fork, :philosopher_0}
237217 Note over philosopher_0,fork_0: t=600ms
238218 fork_0-> > philosopher_0: {:fork_granted, :fork_0}
239219 Note over fork_0,philosopher_0: t=600ms
240- philosopher_2-> > fork_2: {:request_fork, :philosopher_2}
241- Note over philosopher_2,fork_2: t=600ms
242- philosopher_1-> > fork_2: {:request_fork, :philosopher_1}
243- Note over philosopher_1,fork_2: t=600ms
244220 philosopher_0-> > fork_1: {:request_fork, :philosopher_0}
245- Note over philosopher_0,fork_1: t=600ms
246- fork_2-> > philosopher_2: {:fork_granted, :fork_2}
247- Note over fork_2,philosopher_2: t=600ms
248- fork_2-> > philosopher_1: {:fork_denied, :fork_2}
249- Note over fork_2,philosopher_1: t=600ms
250- philosopher_2-> > fork_0: {:request_fork, :philosopher_2}
251- Note over philosopher_2,fork_0: t=600ms
252- fork_0-> > philosopher_2: {:fork_denied, :fork_0}
253- Note over fork_0,philosopher_2: t=600ms
254- philosopher_2-> > fork_2: {:release_fork, :philosopher_2}
255- Note over philosopher_2,fork_2: t=600ms
256- fork_1-> > philosopher_0: {:fork_granted, :fork_1}
257- Note over fork_1,philosopher_0: t=600ms
221+ Note over philosopher_0,fork_1: t=800ms
222+ philosopher_0-> > philosopher_0: {:start_hungry, :fork_0, :fork_1}
223+ Note over philosopher_0,philosopher_0: t=800ms
258224 philosopher_1-> > philosopher_1: {:start_hungry, :fork_2, :fork_1}
259225 Note over philosopher_1,philosopher_1: t=800ms
260226 philosopher_2-> > philosopher_2: {:start_hungry, :fork_2, :fork_0}
261227 Note over philosopher_2,philosopher_2: t=800ms
228+ philosopher_0-> > fork_0: {:request_fork, :philosopher_0}
229+ Note over philosopher_0,fork_0: t=800ms
262230 philosopher_1-> > fork_2: {:request_fork, :philosopher_1}
263231 Note over philosopher_1,fork_2: t=800ms
264232 philosopher_2-> > fork_2: {:request_fork, :philosopher_2}
265233 Note over philosopher_2,fork_2: t=800ms
266- fork_2-> > philosopher_1: {:fork_granted, :fork_2}
267- Note over fork_2,philosopher_1: t=800ms
268- fork_2-> > philosopher_2: {:fork_denied, :fork_2}
269- Note over fork_2,philosopher_2: t=800ms
270- philosopher_1-> > fork_1: {:request_fork, :philosopher_1}
271- Note over philosopher_1,fork_1: t=800ms
272- fork_1-> > philosopher_1: {:fork_denied, :fork_1}
273- Note over fork_1,philosopher_1: t=800ms
274- philosopher_1-> > fork_2: {:release_fork, :philosopher_1}
275- Note over philosopher_1,fork_2: t=800ms
276- philosopher_0-> > philosopher_0: {:start_hungry, :fork_0, :fork_1}
277- Note over philosopher_0,philosopher_0: t=800ms
278- philosopher_0-> > fork_0: {:request_fork, :philosopher_0}
279- Note over philosopher_0,fork_0: t=800ms
280234 fork_0-> > philosopher_0: {:fork_denied, :fork_0}
281235 Note over fork_0,philosopher_0: t=800ms
282- philosopher_0-> > philosopher_0: {:mumble, "I'm full!"}
283- Note over philosopher_0,philosopher_0: t=900ms
284236 philosopher_0-> > fork_0: {:release_fork, :philosopher_0}
285- Note over philosopher_0,fork_0: t=900ms
286- philosopher_0-> > fork_1: {:release_fork, :philosopher_0}
287- Note over philosopher_0,fork_1: t=900ms
237+ Note over philosopher_0,fork_0: t=1000ms
238+ philosopher_2-> > philosopher_2: {:start_hungry, :fork_2, :fork_0}
239+ Note over philosopher_2,philosopher_2: t=1000ms
240+ philosopher_1-> > philosopher_1: {:start_hungry, :fork_2, :fork_1}
241+ Note over philosopher_1,philosopher_1: t=1000ms
288242 philosopher_0-> > philosopher_0: {:start_hungry, :fork_0, :fork_1}
289243 Note over philosopher_0,philosopher_0: t=1000ms
244+ fork_1-> > philosopher_0: {:fork_granted, :fork_1}
245+ Note over fork_1,philosopher_0: t=800ms
246+ fork_2-> > philosopher_2: {:fork_denied, :fork_2}
247+ Note over fork_2,philosopher_2: t=500ms
248+ philosopher_2-> > fork_2: {:request_fork, :philosopher_2}
249+ Note over philosopher_2,fork_2: t=1000ms
250+ philosopher_1-> > fork_2: {:request_fork, :philosopher_1}
251+ Note over philosopher_1,fork_2: t=1000ms
290252 philosopher_0-> > fork_0: {:request_fork, :philosopher_0}
291253 Note over philosopher_0,fork_0: t=1000ms
292254 fork_0-> > philosopher_0: {:fork_granted, :fork_0}
293255 Note over fork_0,philosopher_0: t=1000ms
294- philosopher_0-> > fork_1: {:request_fork, :philosopher_0}
295- Note over philosopher_0,fork_1: t=1000ms
296- fork_1-> > philosopher_0: {:fork_granted, :fork_1}
297- Note over fork_1,philosopher_0: t=1000ms
298- philosopher_2-> > philosopher_2: {:start_hungry, :fork_2, :fork_0}
299- Note over philosopher_2,philosopher_2: t=1000ms
300- philosopher_2-> > fork_2: {:request_fork, :philosopher_2}
301- Note over philosopher_2,fork_2: t=1000ms
302- philosopher_1-> > philosopher_1: {:start_hungry, :fork_2, :fork_1}
303- Note over philosopher_1,philosopher_1: t=1000ms
304256 fork_2-> > philosopher_2: {:fork_granted, :fork_2}
305257 Note over fork_2,philosopher_2: t=1000ms
306- philosopher_1-> > fork_2: {:request_fork, :philosopher_1}
307- Note over philosopher_1,fork_2: t=1000ms
258+ fork_2-> > philosopher_1: {:fork_denied, :fork_2}
259+ Note over fork_2,philosopher_1: t=1000ms
260+ fork_2-> > philosopher_1: {:fork_denied, :fork_2}
261+ Note over fork_2,philosopher_1: t=1000ms
262+ fork_2-> > philosopher_2: {:fork_denied, :fork_2}
263+ Note over fork_2,philosopher_2: t=1000ms
264+ fork_2-> > philosopher_2: {:fork_denied, :fork_2}
265+ Note over fork_2,philosopher_2: t=1000ms
308266 fork_2-> > philosopher_1: {:fork_denied, :fork_2}
309267 Note over fork_2,philosopher_1: t=1000ms
310268 philosopher_2-> > fork_0: {:request_fork, :philosopher_2}
311269 Note over philosopher_2,fork_0: t=1000ms
312- fork_0-> > philosopher_2: {:fork_denied, :fork_0}
313- Note over fork_0,philosopher_2: t=1000ms
314270 philosopher_2-> > fork_2: {:release_fork, :philosopher_2}
315271 Note over philosopher_2,fork_2: t=1000ms
272+ philosopher_0-> > fork_1: {:request_fork, :philosopher_0}
273+ Note over philosopher_0,fork_1: t=1000ms
274+ fork_0-> > philosopher_2: {:fork_denied, :fork_0}
275+ Note over fork_0,philosopher_2: t=1000ms
276+ fork_1-> > philosopher_0: {:fork_denied, :fork_1}
277+ Note over fork_1,philosopher_0: t=1000ms
278+ philosopher_0-> > fork_0: {:release_fork, :philosopher_0}
279+ Note over philosopher_0,fork_0: t=1000ms
316280 </ div >
317281 </ div >
318282
0 commit comments