/// <summary> /// Implements IRunnable.Start /// </summary> protected override void OnStart() { if (Port == 0) { Port = DEFAULT_PORT; } Client = InitClient(); _listen = true; _listenerThreads = new Thread[WORKER_THREADS]; _parserThreads = new Thread[WORKER_THREADS]; _byteQueues = new IFifoQueue <byte[]> [WORKER_THREADS]; _currentQueue = int.MinValue; for (int i = 0; i < WORKER_THREADS; i++) { _byteQueues[i] = new FastFifoQueue <byte[]>(16384); _listenerThreads[i] = new Thread(ListenerLoop) { Name = string.Format("SyslogUdpReceiver[{1}].ListenerLoop[{0}]", i, ToString()), IsBackground = true, Priority = ThreadPriority.AboveNormal }; _listenerThreads[i].Start(); _parserThreads[i] = new Thread(ParserLoop) { Name = string.Format("SyslogUdpReceiver[{1}].ParserLoop[{0}]", i, ToString()), IsBackground = true }; _parserThreads[i].Start(i); } }
public void ConcurrencyTest() { const int size = 3; _errors = 0; IFifoQueue <object> queue = new FastFifoQueue <object>(2048); Thread.CurrentThread.Priority = ThreadPriority.AboveNormal; Thread[] producers = new Thread[size], consumers = new Thread[size]; for (int i = 0; i < size; i++) { producers[i] = new Thread(LoopProducer) { Priority = ThreadPriority.BelowNormal }; consumers[i] = new Thread(LoopConsumer) { Priority = ThreadPriority.BelowNormal }; producers[i].Start(queue); consumers[i].Start(queue); } Thread.Sleep(new TimeSpan(0, 0, 1, 0)); for (int i = 0; i < size; i++) { producers[i].Abort(); consumers[i].Abort(); } Assert.AreEqual(0, _errors); }