concurrency problem part 1: Your friend has written a class for safely computing
ID: 3713962 • Letter: C
Question
concurrency problem
part 1:
Your friend has written a class for safely computing with integers in a concurrent environment. To this end, the class synchronizes all methods.
Describe a scenario where two threads operating concurrently on two SafeInt objects can result in an undesirable outcome.
public class SafeInt {
public SafeInt() { i = 0; }
synchronized void set(int x) {
i = x;
}
synchronized int get() {
return i;
}
synchronized void add(SafeInt other) {
i = i + other.get();
}
private int i;
}
part 2:
How would you fix the problem (show your changes to the code)?
Explanation / Answer
synchronized basiscally works by acquiring lcok on shared resources.
In above example two threads can't excess get i or set i togeteher
But one thread can be adding value of x while other is changing it which might not eb desirable.
public class SafeInt {
public SafeInt() { i = 0; }
synchronized void set(int x) {
i = x;
}
synchronized int get() {
return i;
}
void add(SafeInt other) {
set(i + other.get());
}
private int i;
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.