Exemplo n.º 1
0
        public override void Start()
        {
            Stopwatch.Start();

            for (int i = 0; i < Iterations; i++)
            {
                FindRoots(GetRandom(), GetRandom(), GetRandom());
            }

            Stopwatch.Stop();
            Console.WriteLine($"[Non-concurrent] Elapsed: {Stopwatch.ElapsedMilliseconds}");

            SolvingFinished?.Invoke();
        }
        public override void Start()
        {
            for (int i = 0; i < ThreadAmount; i++)
            {
                ThreadPool.QueueUserWorkItem(WorkItem);
            }

            Stopwatch.Start();
            _notifier.WaitOne();
            Stopwatch.Stop();
            Console.WriteLine($"[ThreadPool] Elapsed: {Stopwatch.ElapsedMilliseconds}ms");

            SolvingFinished?.Invoke();
        }
Exemplo n.º 3
0
        private void WorkItem()
        {
            while (true)
            {
                if (TaskQueue.TryDequeue(out var rootCallback))
                {
                    rootCallback();
                }
                else
                {
                    Interlocked.Increment(ref _threadCounter);
                    if (_threadCounter == ThreadAmount)
                    {
                        Stopwatch.Stop();
                        Console.WriteLine($"[Thread Collection] Elapsed: {Stopwatch.ElapsedMilliseconds}ms");

                        SolvingFinished?.Invoke();
                    }
                    break;
                }
            }
        }