예제 #1
0
        private static void RunMPC(ITransmitter transmitter, IGoalUtilizer utilizer)
        {
            utilizer.Reset();
            var generator = new GoalGenerator();
            IList <Producer> producers = new List <Producer>()
            {
                new Producer(generator, transmitter)
            };
            IList <Consumer> consumers = new List <Consumer>();

            consumers.Add(new Consumer(utilizer, transmitter));
            consumers.Add(new Consumer(utilizer, transmitter));
            consumers.Add(new Consumer(utilizer, transmitter));
            GoalManager manager = new GoalManager(producers, consumers);

            Stopwatch stopWatchBody = new Stopwatch();

            stopWatchBody.Start();

            manager.Run();
            Thread.Sleep(5000);//22 000 000
            manager.Stop();

            stopWatchBody.Stop();
            string    elapsedTimeBody = ConvertTSToString(stopWatchBody.Elapsed);
            Stopwatch stopWatchFinish = new Stopwatch();

            stopWatchFinish.Start();
            var isOk = utilizer.WasUtilizeSuccessful();

            stopWatchFinish.Stop();
            string elapsedTimeFinish = ConvertTSToString(stopWatchFinish.Elapsed);

            Console.WriteLine($"{transmitter.GetType().Name.PadRight(30)} isOk {isOk} nGoals: {generator.Counter} BodyTime: {elapsedTimeBody} FinishTime: {elapsedTimeFinish}");
        }
예제 #2
0
        private static void TestMPCs(IGoalUtilizer utilizer)
        {
            //RunMPC(new UnsafeTransmitter());
            //RunMPC(new ConcurrentQueueDIYTransmitter(), utilizer);

            RunMPC(new ConcurrentQueueTransmitter(), utilizer);

            RunMPC(new MonitorTransmitter(), utilizer);
            using (var transmitter = new SemaphoreSlimTransmitter())
            {
                RunMPC(transmitter, utilizer);
            }
            RunMPC(new InterlockedTransmitter(), utilizer);
            using (var transmitter = new SemaphoreTransmitter(true))
            {
                RunMPC(transmitter, utilizer);
            }
            using (var transmitter = new SemaphoreTransmitter(false))
            {
                RunMPC(transmitter, utilizer);
            }
            using (var transmitter = new MutexTransmitter(true))
            {
                RunMPC(transmitter, utilizer);
            }
            using (var transmitter = new MutexTransmitter(false))
            {
                RunMPC(transmitter, utilizer);
            }
            using (var transmitter = new AutoResetEventTransmitter())
            {
                RunMPC(transmitter, utilizer);
            }
            using (var transmitter = new EventWaitHandleAutoTransmitter())
            {
                RunMPC(transmitter, utilizer);
            }
        }
예제 #3
0
 public Consumer(IGoalUtilizer utilizer, ITransmitter transmitter)
 {
     _utilizer    = utilizer;
     _transmitter = transmitter;
 }