public void Setup()
{
Thread[] producerThreads = Enumerable.Range( 0, this.Threads ).Select( i => new Thread( this.ProducerThread ) ).ToArray();
Thread[] consumerThreads = Enumerable.Range( 0, this.Threads ).Select( i => new Thread( this.ConsumerThread ) ).ToArray();
this.allThreads = producerThreads.Union( consumerThreads ).ToArray();
startBarrier = new Barrier( allThreads.Length + 1 );
completedBarrier = new Barrier( allThreads.Length + 1 );
foreach ( var t in allThreads ) t.Start();
}