Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

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;
}