Beispiel #1
0
        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();
                }
            }
        }
Beispiel #3
0
        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();
                }
            });
        }