import java.util.Random;
public class FMyThread extends Thread {
int myId;
Lock lock;
Random r = new Random();
public FMyThread(int id, Lock lock) {
myId = id;
this.lock = lock;
}
void nonCriticalSection() {
System.out.println(myId + " is not in CS");
Util.mySleep(r.nextInt(1000));
}
void CriticalSection() {
System.out.println(myId + " is in CS *****");
// critical section code
Util.mySleep(r.nextInt(1000));
}
public void run() {
while (true) {
lock.requestCS(myId);
CriticalSection();
lock.releaseCS(myId);
nonCriticalSection();
}
}
public static void main(String[] args) throws Exception {
FMyThread t[];
int N = 2;
t = new FMyThread[N];
Lock lock = new PetersonAlgorithm();//or any other mutex algorithm
for (int i = 0; i < N; i++) {
t[i] = new FMyThread(i, lock);
t[i].start();
}
}
}