private static void ProduceMethod(object prodConsObj)
        {
            IProduceConsume <DTO> prodCons = prodConsObj as IProduceConsume <DTO>;
            Random rnd = new Random();

            byte[] rndData = new byte[8];
            byte[] allData = new byte[12];

            if (prodCons == null)
            {
                bKillSwitch = true;
            }

            int iCount = 0;

            while (!bKillSwitch)
            {
                rnd.NextBytes(rndData);
                Buffer.BlockCopy(rndData, 0, allData, 0, rndData.Length);
                Buffer.BlockCopy(BitConverter.GetBytes((uint)iCount), 0, allData, 8, sizeof(uint));
                prodCons.Enqueue(DTO.GetStruct(allData));
                cTimer.RecordTime(cTimer.ActionsEnm.Enq, (uint)iCount);
                iCount++;
                if (iCount == 2000)
                {
                    bKillSwitch = true;
                    cTimer.WriteAllRecords();
                }
            }
            prodCons.Stop();
        }
        public static void Main(string[] args)
        {
            IProduceConsume <DTO> prodConsume = ProduceConsumeFactory <DTO> .GetImplementation(ProdCons.Interlocked, 2);


            Thread thrProduce = new Thread(new ParameterizedThreadStart(ProduceMethod));

            thrProduce.Start(prodConsume);

            Thread thrConsume = new Thread(new ParameterizedThreadStart(ConsumeMethod));

            thrConsume.Start(prodConsume);

            thrProduce.Join();
        }