Ejemplo n.º 1
0
        public void TestInvokeOnAll()
        {
            LosgapSystem.InvokeOnMaster(() => {             // Must invoke on master because the PP has assurances that the master thread is invoking operations
                // Define variables and constants
                const int NUM_ITERATIONS        = 10000;
                HashSet <Thread> invokedThreads = new HashSet <Thread>();
                ParallelizationProvider pp      = new ParallelizationProvider();

                // Set up context


                // Execute
                for (int i = 0; i < NUM_ITERATIONS; i++)
                {
                    invokedThreads.Clear();
                    pp.InvokeOnAll(() => {
                        lock (invokedThreads) {
                            invokedThreads.Add(Thread.CurrentThread);
                        }
                    }, true);
                    Assert.AreEqual(pp.NumThreads, (uint)invokedThreads.Count);
                    invokedThreads.Clear();
                    pp.InvokeOnAll(() => {
                        lock (invokedThreads) {
                            invokedThreads.Add(Thread.CurrentThread);
                        }
                    }, false);
                    Assert.AreEqual(pp.NumThreads - 1U, (uint)invokedThreads.Count);
                    Assert.IsFalse(invokedThreads.Contains(Thread.CurrentThread));
                }

                // Assert outcome
            });
        }
Ejemplo n.º 2
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;
                }
            });
        }