private void initTest(ThreadLocalRunner[] runners)
        {
            Thread[] threads = new Thread[runners.Length];

            // build threads
            for (int i = 0; i < threads.Length; ++i)
            {
                threads[i] = new Thread(runners[i].threadStart);
            }

            // kick-off each thread
            foreach (Thread thread in threads)
            {
                thread.Start();
                Thread.Sleep(200);
            }

            // 
            foreach (Thread thread in threads)
            {
                lock (thread)
                {
                    Monitor.PulseAll(thread);
                }
            }

            foreach (Thread thread in threads)
            {
                thread.Join();
            }
        }
Example #2
0
        public void CyclicDependencyWithThreadSafeGuard()
        {
            ThreadLocalRunner[] runner = new ThreadLocalRunner[3];

            for (int i = 0; i < runner.Length; ++i)
            {
                runner[i] = new ThreadLocalRunner();
            }

            initTest(runner);

            for (int i = 0; i < runner.Length; ++i)
            {
                Assert.IsNull((runner[i]).exception);
            }
        }
		public void CyclicDependencyWithThreadSafeGuard() 
		{
			ThreadLocalRunner[] runner = new ThreadLocalRunner[3];

			for(int i = 0; i < runner.Length; ++i) 
			{
				runner[i] = new ThreadLocalRunner();
			}
        
			initTest(runner);

			for(int i = 0; i < runner.Length; ++i) 
			{
				Assert.IsNull((runner[i]).exception);
			}
		}