Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.lang.reflect.Array;
- import java.util.ArrayList;
- public class DekkerLock extends AbstractFixnumLock {
- private volatile int turn = 0;
- private static int threadNumber = 2;
- // private volatile boolean t1 = false
- private volatile ArrayList<VolatileBool> wantsToEnter = getFilledList(threadNumber, new VolatileBool(false));
- DekkerLock() {
- super(threadNumber);
- }
- @Override
- public void lock() {
- int threadId = getId();
- int anotherThreadId = getAnotherThreadId(threadId);
- wantsToEnter.set(threadId, new VolatileBool(true));
- while(wantsToEnter.get(anotherThreadId).getBool()) {
- System.out.println("TYT TRED" + turn + threadId);
- if (turn != threadId) {
- System.out.println("Thread" + threadId + " lets " + anotherThreadId + " run");
- wantsToEnter.set(threadId, new VolatileBool(false));
- while (turn != threadId) {
- System.out.println("waiting for turn" + turn + (threadId));
- // the thread waits for its turn
- }
- System.out.println("Thread" + threadId + " turn");
- wantsToEnter.set(threadId, new VolatileBool(true));
- }
- }
- }
- @Override
- public void unlock() {
- int threadId = getId();
- wantsToEnter.set(threadId, new VolatileBool(false));
- turn = getAnotherThreadId(threadId);
- }
- private static int getAnotherThreadId(int threadId) {
- return (threadId + 1) % threadNumber;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement