23
|
1 package alice.test.dpp.codesegment.philosophy;
|
5
|
2
|
|
3 import alice.codesegment.CodeSegment;
|
|
4 import alice.datasegment.CommandType;
|
|
5 import alice.datasegment.Receiver;
|
20
|
6 import alice.test.dpp.datasegment.Fork;
|
|
7 import alice.test.dpp.datasegment.Philosophy;
|
5
|
8
|
|
9 public class TakeForkCodeSegment extends CodeSegment {
|
|
10
|
22
|
11 /*
|
|
12 * Unuse CodeSegment
|
|
13 */
|
5
|
14 Receiver arg1 = ids.create(CommandType.TAKE);
|
|
15 Receiver arg2 = ids.create(CommandType.TAKE);
|
14
|
16 Receiver arg3 = ids.create(CommandType.TAKE);
|
|
17
|
|
18 public TakeForkCodeSegment(String pName, String rFork, String lFork) {
|
|
19 arg1.setKey(pName);
|
15
|
20 // dead lock
|
14
|
21 arg2.setKey(rFork);
|
|
22 arg3.setKey(lFork);
|
|
23 }
|
5
|
24
|
|
25 @Override
|
|
26 public void run() {
|
14
|
27 Philosophy phil = arg1.asClass(Philosophy.class);
|
5
|
28 Fork rightFork = arg2.asClass(Fork.class);
|
14
|
29 Fork leftFork = arg3.asClass(Fork.class);
|
|
30 System.out.println(phil.getName() + " is trying to take the fork.");
|
15
|
31
|
14
|
32 if (leftFork.getFork(phil.getName()) && rightFork.getFork(phil.getName()) ) {
|
|
33 phil.setState(Philosophy.State.EAT);
|
5
|
34 } else {
|
14
|
35 leftFork.onTheTable(phil.getName());
|
|
36 rightFork.onTheTable(phil.getName());
|
5
|
37 }
|
15
|
38
|
14
|
39 new ScheduleCodeSegment(phil.getName());
|
|
40 ods.update("local", phil.getName(), phil);
|
5
|
41 ods.update("local", leftFork.getForkName(), leftFork);
|
|
42 ods.update("local", rightFork.getForkName(), rightFork);
|
|
43 }
|
|
44 }
|