Skip to content

Commit b7e4e7b

Browse files
committed
Synchronizing logger and code cleanup
1 parent 23557b8 commit b7e4e7b

File tree

8 files changed

+285
-20
lines changed

8 files changed

+285
-20
lines changed

src/labs/sem1/lab10/DebugStack.java

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,36 +15,52 @@ public void setLogger(Object logger) {
1515

1616
public void push(int i) {
1717
if (debug)
18-
logger.printRow("Push START");
18+
synchronized (logger) {
19+
logger.print("Push START");
20+
}
1921
super.push(i);
2022
if (debug)
21-
logger.printRow("Push END");
23+
synchronized (logger) {
24+
logger.print("Push END");
25+
}
2226
}
2327

2428
public int pop() {
2529
if (debug)
26-
logger.printRow("Pop START");
30+
synchronized (logger) {
31+
logger.print("Pop START");
32+
}
2733
int i = super.pop();
2834
if (debug)
29-
logger.printRow("Pop END");
35+
synchronized (logger) {
36+
logger.print("Pop END");
37+
}
3038
return i;
3139
}
3240

3341
public boolean equals(Object o) {
3442
if (debug)
35-
logger.printRow("Equals START");
43+
synchronized (logger) {
44+
logger.print("Equals START");
45+
}
3646
boolean b = super.equals(o);
3747
if (debug)
38-
logger.printRow("Equals END");
48+
synchronized (logger) {
49+
logger.print("Equals END");
50+
}
3951
return b;
4052
}
4153

4254
public String toString() {
4355
if (debug)
44-
logger.printRow("toString START");
56+
synchronized (logger) {
57+
logger.print("toString START");
58+
}
4559
String s = super.toString();
4660
if (debug)
47-
logger.printRow("toString END");
61+
synchronized (logger) {
62+
logger.print("toString END");
63+
}
4864
return s;
4965
}
5066
}

src/labs/sem1/lab10/Logger.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public Logger(int threadsCount) {
2424
}
2525
}
2626

27-
public void printRow(String s) {
27+
public void print(String s) {
2828
// print s at the column of the current thread (other columns should be empty)
2929
// get current thread id from "Thread 0" -> 1 (main -> 0)
3030
String threadName = Thread.currentThread().getName();

src/labs/sem1/lab10/Main.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,11 @@ public static void main(String[] args) {
1010
SynchroStackFast.class
1111
};
1212

13-
int threadsPerMethod = 24; // threads per method
14-
int itersPerMethod = 1000; // iterations per method
13+
int threadsPerMethod = 2; // threads per method
14+
int itersPerMethod = 5; // iterations per method
15+
16+
// logs file path
17+
String logsPath = "src/labs/sem1/lab10/results/%s.csv";
1518

1619
// initial size of stacks (to avoid empty stack errors)
1720
int initialSize = itersPerMethod * threadsPerMethod;
@@ -43,12 +46,12 @@ public static void main(String[] args) {
4346
}
4447
},
4548
() -> { // equals (read operation, light)
46-
for (int i = 0; i < itersPerMethod * 20; i++) {
49+
for (int i = 0; i < itersPerMethod; i++) {
4750
stack.equals(stack);
4851
}
4952
},
5053
() -> { // toString (read operation, heavy)
51-
for (int i = 0; i < itersPerMethod / 5; i++) {
54+
for (int i = 0; i < itersPerMethod; i++) {
5255
stack.toString();
5356
}
5457
}
@@ -67,7 +70,7 @@ public static void main(String[] args) {
6770
Logger log = null;
6871
// set logger if stack is subclass of DebugStack and not DebugStack itself
6972
// because DebugStack is not synchronized (and therefore not thread-safe)
70-
if (stack instanceof DebugStack && !stack.getClass().getSimpleName().equals("DebugStack")) {
73+
if (stack instanceof DebugStack) {
7174
log = new Logger(threads.length);
7275
((DebugStack) stack).setLogger(log);
7376
}
@@ -98,7 +101,7 @@ public static void main(String[] args) {
98101

99102
// write to file
100103
if (log != null) {
101-
log.writeFile("results/" + stack.getClass().getSimpleName() + ".csv");
104+
log.writeFile(String.format(logsPath, stack.getClass().getSimpleName()));
102105
}
103106
}
104107
}

src/labs/sem1/lab10/SynchroStack.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package labs.sem1.lab10;
22

3+
// с этим классом одновременно может работать один поток (для всех методов)
4+
35
public class SynchroStack extends DebugStack {
6+
// change this to extends DebugStack / Stack to enable / disable debug
47

58
public synchronized void push(int i) {
69
super.push(i);

src/labs/sem1/lab10/SynchroStackFast.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package labs.sem1.lab10;
22

3-
public class SynchroStackFast extends DebugStack {
4-
// с этим классом одновременно может работать один записывающий поток
5-
// (push и pop) и несколько читающих (equals и toString)
3+
// с этим классом одновременно может работать один записывающий поток
4+
// (push и pop) и несколько читающих (equals и toString)
5+
// для этого есть два объекта-монитора: для записи и для чтения
66

7-
// для этого есть два объекта-монитора: для записи и для чтения
8-
// при записи блокируется монитор для записи, при чтении - монитор для чтения
7+
public class SynchroStackFast extends DebugStack {
8+
// change this to extends DebugStack / Stack to enable / disable debug
99

1010
Object readLock = new Object();
1111
Object writeLock = new Object();
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
main,Thread 0,Thread 1,Thread 2,Thread 3,Thread 4,Thread 5,Thread 6,Thread 7
2+
"",Push START,"","","","","","",""
3+
"","","","","",Equals START,"","",""
4+
"","","","","",Equals END,"","",""
5+
"",Push END,"","","","","","",""
6+
"",Push START,"","","","","","",""
7+
"","","","","","",Equals START,"",""
8+
"","","","","","","",toString START,""
9+
"","","","",Pop START,"","","",""
10+
"","","","",Pop END,"","","",""
11+
"","","","",Pop START,"","","",""
12+
"","","","",Pop END,"","","",""
13+
"","","","",Pop START,"","","",""
14+
"","",Push START,"","","","","",""
15+
"","",Push END,"","","","","",""
16+
"","",Push START,"","","","","",""
17+
"","",Push END,"","","","","",""
18+
"","",Push START,"","","","","",""
19+
"","","","",Pop END,"","","",""
20+
"","","","",Pop START,"","","",""
21+
"","","","","","","",toString END,""
22+
"","","","","","","",toString START,""
23+
"","","","","","","","",toString START
24+
"","","","","","",Equals END,"",""
25+
"","","","","","",Equals START,"",""
26+
"",Push END,"","","","","","",""
27+
"",Push START,"","","","","","",""
28+
"","","",Pop START,"","","","",""
29+
"","","",Pop END,"","","","",""
30+
"","","","","",Equals START,"","",""
31+
"","","","","",Equals END,"","",""
32+
"","","",Pop START,"","","","",""
33+
"","","",Pop END,"","","","",""
34+
"",Push END,"","","","","","",""
35+
"",Push START,"","","","","","",""
36+
"","","","","","",Equals END,"",""
37+
"","","","","","",Equals START,"",""
38+
"","","","","","",Equals END,"",""
39+
"","","","","","",Equals START,"",""
40+
"","","","","","","","",toString END
41+
"","","","","","","","",toString START
42+
"","","","","","","",toString END,""
43+
"","","","","","","",toString START,""
44+
"","","","",Pop END,"","","",""
45+
"","","","","","","",toString END,""
46+
"","","","",Pop START,"","","",""
47+
"","","","","","","",toString START,""
48+
"","","","",Pop END,"","","",""
49+
"","","","","","","",toString END,""
50+
"","","","","","","",toString START,""
51+
"","",Push END,"","","","","",""
52+
"","",Push START,"","","","","",""
53+
"","",Push END,"","","","","",""
54+
"","",Push START,"","","","","",""
55+
"","","","","","","",toString END,""
56+
"","","","","","","","",toString END
57+
"","","","","","","","",toString START
58+
"","","","","","",Equals END,"",""
59+
"","","","","","","","",toString END
60+
"","","","","","",Equals START,"",""
61+
"","","","","","",Equals END,"",""
62+
"",Push END,"","","","","","",""
63+
"",Push START,"","","","","","",""
64+
"","","",Pop START,"","","","",""
65+
"","","",Pop END,"","","","",""
66+
"","","",Pop START,"","","","",""
67+
"","","",Pop END,"","","","",""
68+
"","","",Pop START,"","","","",""
69+
"","","","","",Equals START,"","",""
70+
"","","","","",Equals END,"","",""
71+
"","","",Pop END,"","","","",""
72+
"",Push END,"","","","","","",""
73+
"","","","","","","","",toString START
74+
"","",Push END,"","","","","",""
75+
"","","","","","","","",toString END
76+
"","","","","","","","",toString START
77+
"","","","","","","","",toString END
78+
"","","","","",Equals START,"","",""
79+
"","","","","",Equals END,"","",""
80+
"","","","","",Equals START,"","",""
81+
"","","","","",Equals END,"","",""
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
main,Thread 0,Thread 1,Thread 2,Thread 3,Thread 4,Thread 5,Thread 6,Thread 7
2+
"",Push START,"","","","","","",""
3+
"",Push END,"","","","","","",""
4+
"",Push START,"","","","","","",""
5+
"",Push END,"","","","","","",""
6+
"",Push START,"","","","","","",""
7+
"",Push END,"","","","","","",""
8+
"",Push START,"","","","","","",""
9+
"",Push END,"","","","","","",""
10+
"",Push START,"","","","","","",""
11+
"",Push END,"","","","","","",""
12+
"","",Push START,"","","","","",""
13+
"","",Push END,"","","","","",""
14+
"","",Push START,"","","","","",""
15+
"","",Push END,"","","","","",""
16+
"","",Push START,"","","","","",""
17+
"","",Push END,"","","","","",""
18+
"","",Push START,"","","","","",""
19+
"","",Push END,"","","","","",""
20+
"","",Push START,"","","","","",""
21+
"","",Push END,"","","","","",""
22+
"","","",Pop START,"","","","",""
23+
"","","",Pop END,"","","","",""
24+
"","","",Pop START,"","","","",""
25+
"","","",Pop END,"","","","",""
26+
"","","",Pop START,"","","","",""
27+
"","","",Pop END,"","","","",""
28+
"","","",Pop START,"","","","",""
29+
"","","",Pop END,"","","","",""
30+
"","","",Pop START,"","","","",""
31+
"","","",Pop END,"","","","",""
32+
"","","","",Pop START,"","","",""
33+
"","","","",Pop END,"","","",""
34+
"","","","",Pop START,"","","",""
35+
"","","","",Pop END,"","","",""
36+
"","","","",Pop START,"","","",""
37+
"","","","",Pop END,"","","",""
38+
"","","","",Pop START,"","","",""
39+
"","","","",Pop END,"","","",""
40+
"","","","",Pop START,"","","",""
41+
"","","","",Pop END,"","","",""
42+
"","","","","","","","",toString START
43+
"","","","","","","","",toString END
44+
"","","","","","","","",toString START
45+
"","","","","","","","",toString END
46+
"","","","","","","","",toString START
47+
"","","","","","","","",toString END
48+
"","","","","","","","",toString START
49+
"","","","","","","","",toString END
50+
"","","","","","","","",toString START
51+
"","","","","","","","",toString END
52+
"","","","","","","",toString START,""
53+
"","","","","","","",toString END,""
54+
"","","","","","","",toString START,""
55+
"","","","","","","",toString END,""
56+
"","","","","","","",toString START,""
57+
"","","","","","","",toString END,""
58+
"","","","","","","",toString START,""
59+
"","","","","","","",toString END,""
60+
"","","","","","","",toString START,""
61+
"","","","","","","",toString END,""
62+
"","","","","","",Equals START,"",""
63+
"","","","","","",Equals END,"",""
64+
"","","","","","",Equals START,"",""
65+
"","","","","","",Equals END,"",""
66+
"","","","","","",Equals START,"",""
67+
"","","","","","",Equals END,"",""
68+
"","","","","","",Equals START,"",""
69+
"","","","","","",Equals END,"",""
70+
"","","","","","",Equals START,"",""
71+
"","","","","","",Equals END,"",""
72+
"","","","","",Equals START,"","",""
73+
"","","","","",Equals END,"","",""
74+
"","","","","",Equals START,"","",""
75+
"","","","","",Equals END,"","",""
76+
"","","","","",Equals START,"","",""
77+
"","","","","",Equals END,"","",""
78+
"","","","","",Equals START,"","",""
79+
"","","","","",Equals END,"","",""
80+
"","","","","",Equals START,"","",""
81+
"","","","","",Equals END,"","",""
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
main,Thread 0,Thread 1,Thread 2,Thread 3,Thread 4,Thread 5,Thread 6,Thread 7
2+
"",Push START,"","","","","","",""
3+
"",Push END,"","","","","","",""
4+
"","","",Pop START,"","","","",""
5+
"","","",Pop END,"","","","",""
6+
"","","",Pop START,"","","","",""
7+
"","","",Pop END,"","","","",""
8+
"","",Push START,"","","","","",""
9+
"","",Push END,"","","","","",""
10+
"","","","","",Equals START,"","",""
11+
"","","","","",Equals END,"","",""
12+
"","",Push START,"","","","","",""
13+
"","",Push END,"","","","","",""
14+
"","",Push START,"","","","","",""
15+
"","","","","","",Equals START,"",""
16+
"","","","","","",Equals END,"",""
17+
"","",Push END,"","","","","",""
18+
"","",Push START,"","","","","",""
19+
"","",Push END,"","","","","",""
20+
"","","","","","",Equals START,"",""
21+
"","","","","","",Equals END,"",""
22+
"","","","","","",Equals START,"",""
23+
"","","","","","",Equals END,"",""
24+
"","","","","","",Equals START,"",""
25+
"","","","","","",Equals END,"",""
26+
"","","","","","",Equals START,"",""
27+
"","",Push START,"","","","","",""
28+
"","",Push END,"","","","","",""
29+
"","","","","","",Equals END,"",""
30+
"","","",Pop START,"","","","",""
31+
"","","",Pop END,"","","","",""
32+
"","","",Pop START,"","","","",""
33+
"","","",Pop END,"","","","",""
34+
"","","",Pop START,"","","","",""
35+
"","","","","","","","",toString START
36+
"","","",Pop END,"","","","",""
37+
"","","","","","","","",toString END
38+
"","","","","","","","",toString START
39+
"","","","",Pop START,"","","",""
40+
"","","","","","","","",toString END
41+
"","","","","","","","",toString START
42+
"","","","",Pop END,"","","",""
43+
"","","","",Pop START,"","","",""
44+
"","","","","","","","",toString END
45+
"","","","","","","","",toString START
46+
"","","","",Pop END,"","","",""
47+
"","","","",Pop START,"","","",""
48+
"","","","",Pop END,"","","",""
49+
"","","","",Pop START,"","","",""
50+
"","","","","","","","",toString END
51+
"","","","","","","","",toString START
52+
"","","","",Pop END,"","","",""
53+
"","","","",Pop START,"","","",""
54+
"","","","",Pop END,"","","",""
55+
"","","","","","","","",toString END
56+
"",Push START,"","","","","","",""
57+
"","","","","","","",toString START,""
58+
"",Push END,"","","","","","",""
59+
"","","","","","","",toString END,""
60+
"",Push START,"","","","","","",""
61+
"",Push END,"","","","","","",""
62+
"","","","","","","",toString START,""
63+
"","","","","","","",toString END,""
64+
"",Push START,"","","","","","",""
65+
"",Push END,"","","","","","",""
66+
"","","","","","","",toString START,""
67+
"","","","","","","",toString END,""
68+
"",Push START,"","","","","","",""
69+
"",Push END,"","","","","","",""
70+
"","","","","","","",toString START,""
71+
"","","","","","","",toString END,""
72+
"","","","","","","",toString START,""
73+
"","","","","","","",toString END,""
74+
"","","","","",Equals START,"","",""
75+
"","","","","",Equals END,"","",""
76+
"","","","","",Equals START,"","",""
77+
"","","","","",Equals END,"","",""
78+
"","","","","",Equals START,"","",""
79+
"","","","","",Equals END,"","",""
80+
"","","","","",Equals START,"","",""
81+
"","","","","",Equals END,"","",""

0 commit comments

Comments
 (0)