コード例 #1
0
        /// <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);
            }
        }
コード例 #2
0
        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);
        }