diff --git a/pp.A4-HandOverHandLocking/src/main/java/pp/Main.java b/pp.A4-HandOverHandLocking/src/main/java/pp/Main.java index 26e7031..b1a13c4 100644 --- a/pp.A4-HandOverHandLocking/src/main/java/pp/Main.java +++ b/pp.A4-HandOverHandLocking/src/main/java/pp/Main.java @@ -18,25 +18,25 @@ public class Main { } public static void main(String... args) throws InterruptedException { - list = new ThreadsafeSimplifiedList<>(); - for (int i = 0; i < 5000; i++) { - list.add(i); - } - var thread0 = new Thread(sliceSum(0, 1250, 780625)); - var thread1 = new Thread(sliceSum(1250, 2500, 2343125)); - var thread2 = new Thread(sliceSum(2500, 3750, 3905625)); - var thread3 = new Thread(sliceSum(3750, 5000, 5468125)); - var start = System.currentTimeMillis(); - thread0.start(); - thread1.start(); - thread2.start(); - thread3.start(); - thread0.join(); - thread1.join(); - thread2.join(); - thread3.join(); - System.out.printf("%s: %d ms\n", list.getClass().toString(), - System.currentTimeMillis() - start); + list = new ThreadsafeSimplifiedList<>(); + for (int i = 0; i < 5000; i++) { + list.add(i); + } + var thread0 = new Thread(sliceSum(0, 1250, 780625)); + var thread1 = new Thread(sliceSum(1250, 2500, 2343125)); + var thread2 = new Thread(sliceSum(2500, 3750, 3905625)); + var thread3 = new Thread(sliceSum(3750, 5000, 5468125)); + var start = System.currentTimeMillis(); + thread0.start(); + thread1.start(); + thread2.start(); + thread3.start(); + thread0.join(); + thread1.join(); + thread2.join(); + thread3.join(); + System.out.printf("%s: %d ms\n", list.getClass().toString(), + System.currentTimeMillis() - start); } } diff --git a/pp.A4-HandOverHandLocking/src/main/java/pp/ThreadsafeSimplifiedList.java b/pp.A4-HandOverHandLocking/src/main/java/pp/ThreadsafeSimplifiedList.java index fadeaf7..a6e5f71 100644 --- a/pp.A4-HandOverHandLocking/src/main/java/pp/ThreadsafeSimplifiedList.java +++ b/pp.A4-HandOverHandLocking/src/main/java/pp/ThreadsafeSimplifiedList.java @@ -52,9 +52,8 @@ public class ThreadsafeSimplifiedList implements SimplifiedList { } } try { - return (ptr.element); - } - finally { + return delay(ptr.element); + } finally { ptr.lock.unlock(); } } @@ -113,10 +112,13 @@ public class ThreadsafeSimplifiedList implements SimplifiedList { throw new IndexOutOfBoundsException(index + " out of bounds"); } } - var prevElement = ptr.element; - ptr.element = element; - ptr.lock.unlock(); - return prevElement; + try { + var prevElement = ptr.element; + ptr.element = element; + return prevElement; + } finally { + ptr.lock.unlock(); + } } /**