public void TestForceSingleThreaded() { LosgapSystem.InvokeOnMaster(() => { // Must invoke on master because the PP has assurances that the master thread is invoking operations const int NUM_ITERATIONS = 10000; HashSet <Thread> invokedThreads = new HashSet <Thread>(); ParallelizationProvider pp = new ParallelizationProvider(); for (int i = 0; i < NUM_ITERATIONS; i++) { pp.ForceSingleThreadedMode = true; invokedThreads.Clear(); pp.InvokeOnAll(() => { lock (invokedThreads) { invokedThreads.Add(Thread.CurrentThread); } }, true); Assert.AreEqual(LosgapSystem.MasterThread, invokedThreads.Single()); invokedThreads.Clear(); pp.Execute(100, 1, atomic => { lock (invokedThreads) { invokedThreads.Add(Thread.CurrentThread); } }); Assert.AreEqual(LosgapSystem.MasterThread, invokedThreads.Single()); pp.ForceSingleThreadedMode = false; } }); }
public void PipelineIterate(ParallelizationProvider parallelizationProvider, long deltaMs) { lock (syncObject) { ++preExecuteCalls; } parallelizationProvider.Execute(workspace.Length, execBlockSize, ExecuteBlock); lock (syncObject) { ++postExecuteCalls; Action postExecHandler = PostExec; if (postExecHandler != null) { postExecHandler(); } } }
public void TestWaitForSlavesToExit() { LosgapSystem.InvokeOnMaster(() => { // Must invoke on master because the PP has assurances that the master thread is invoking operations const int NUM_ITERATIONS = 300; for (int i = 0; i < NUM_ITERATIONS; ++i) { ParallelizationProvider pp = new ParallelizationProvider(); pp.Execute(10, 1, x => { if (x > 10) { Console.WriteLine("This will never be called."); } }); (pp as IDisposable).Dispose(); pp.WaitForSlavesToExit(); } }); }