From c4c783610bb03e7d3c5feb07332fb2bc3c64bb64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Lema=C5=84czyk?= Date: Tue, 28 Oct 2025 15:32:15 +0100 Subject: [PATCH] Add start gate to by-divisor task scheduling --- PerfectNumbers.Core/MersenneNumberDivisorByDivisorTester.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/PerfectNumbers.Core/MersenneNumberDivisorByDivisorTester.cs b/PerfectNumbers.Core/MersenneNumberDivisorByDivisorTester.cs index fe30b0b..4ecca63 100644 --- a/PerfectNumbers.Core/MersenneNumberDivisorByDivisorTester.cs +++ b/PerfectNumbers.Core/MersenneNumberDivisorByDivisorTester.cs @@ -278,6 +278,7 @@ public static class MersenneNumberDivisorByDivisorTester int taskCount = (totalCount + partitionSize - 1) / partitionSize; Task[] tasks = new Task[taskCount]; + var startGate = new ManualResetEventSlim(initialState: false); int taskIndex = 0; for (int start = 0; start < totalCount; start += partitionSize) @@ -292,6 +293,8 @@ public static class MersenneNumberDivisorByDivisorTester tasks[taskIndex++] = Task.Factory.StartNew( () => { + startGate.Wait(); + for (int index = rangeStart; index < rangeEnd; index++) { ProcessPrime(filteredPrimes[index]); @@ -302,7 +305,9 @@ public static class MersenneNumberDivisorByDivisorTester scheduler); } + startGate.Set(); Task.WaitAll(tasks); + startGate.Dispose(); } } }