示例#1
0
        public void Run(NumberReader reader)
        {
            var results = new List<long>();
            var numbersToCheck = new Queue<long>();

            StartComputationThreads(results, numbersToCheck);

            var progressMonitor = new ProgressMonitor(results);

            new Thread(progressMonitor.Run) {IsBackground = true}.Start();

            reader.ReadIntegers(numbersToCheck);
            //foreach (var value in reader.ReadIntegers())
            //{
            //    lock (IsNumberPrimeCalculator.LockQueue)
            //    {
            //        numbersToCheck.Enqueue(value);
            //    }
            //}

            while (true) {
                bool keepGoing = true;
                lock (IsNumberPrimeCalculator.LockQueue)
                {
                    keepGoing = numbersToCheck.Count > 0;
                }
                if (keepGoing == false)
                {
                    break;
                }
                Thread.Sleep(100); // wait for the computation to complete.
            }
            Console.WriteLine("{0} of the numbers were prime", progressMonitor.TotalCount);
        }
示例#2
0
        public void Run(NumberReader reader)
        {
            var results        = new List <long>();
            var numbersToCheck = new Queue <long>();

            StartComputationThreads(results, numbersToCheck);

            var progressMonitor = new ProgressMonitor(results);

            new Thread(progressMonitor.Run)
            {
                IsBackground = true
            }.Start();
            reader.ReadIntegers(numbersToCheck);

            while (true)
            {
                bool continuing = true;
                lock (IsNumberPrimeCalculator.LockQueue)
                {
                    continuing = numbersToCheck.Count > 0;
                }
                if (continuing == false)
                {
                    break;
                }

                Thread.Sleep(100); // wait for the computation to complete.
            }
            Console.WriteLine("{0} of the numbers were prime", progressMonitor.TotalCount);
        }
示例#3
0
        public void Run(NumberReader reader)
        {
            var results = new lockedList(new List <long>()); //Create a list wrapped in an object thats a little more threadsafe.
            var entries = new Queue <long>();

            foreach (var value in reader.ReadIntegers())
            {
                entries.Enqueue(value);                                   //Enqueue before to avoid lock contention
            }
            var numbersToCheck = new lockedQueue(entries, entries.Count); //Wrap the queue in a threadsafe structure.

            StartComputationThreads(results, numbersToCheck);

            var progressMonitor = new ProgressMonitor(results);

            new Thread(progressMonitor.Run)
            {
                IsBackground = true
            }.Start();

            while (!numbersToCheck.Done() || !progressMonitor.Clean())
            {
                Thread.Sleep(100);                                                        // wait for the computation to complete. Signaled by a clean progmon and empty completed queue.
            }
            //I thought about changing sleep to depend on how many numbers are left in the queue... but nah too much work.
            //The order of these is deliberate, since the first check will most usually be the concerning one.

            Console.WriteLine("{0} of the numbers were prime", progressMonitor.TotalCount);
        }
示例#4
0
        public void Run(NumberReader reader)
        {
            lock (synclock)
            {
                var results = new List<long>();
                var numbersToCheck = new Queue<long>();

                StartComputationThreads(results, numbersToCheck);

                var progressMonitor = new ProgressMonitor(results);

                new Thread(progressMonitor.Run) { IsBackground = true }.Start();

                foreach (var value in reader.ReadIntegers())
                {
                    numbersToCheck.Enqueue(value);
                }

                while (numbersToCheck.Count > 0)
                {
                    Thread.Sleep(100); // wait for the computation to complete.
                }
                Console.WriteLine("{0} of the numbers were prime", progressMonitor.TotalCount);
            }
        }
示例#5
0
        public void Run(NumberReader reader)
        {
            var    results        = new List <long>();
            var    numbersToCheck = new BoundBuffer <long>();
            RwLock _wlock         = new RwLock();


            StartComputationThreads(results, numbersToCheck);

            var progressMonitor = new ProgressMonitor(results);

            new Thread(progressMonitor.Run)
            {
                IsBackground = true
            }.Start();

            _wlock.WriteLock();
            foreach (var value in reader.ReadIntegers())
            {
                numbersToCheck.Enqueue(value);                //critical section
            }


            while (numbersToCheck.Count() > 0)
            {
                Thread.Sleep(100); // wait for the computation to complete. New Lock?
            }

            Console.WriteLine("{0} of the numbers were prime", progressMonitor.TotalCount);
            _wlock.WriteUnLock();
        }
示例#6
0
        public void Run(NumberReader reader)
        {
            var results        = new List <long>();
            var numbersToCheck = new Boundbuffer <long>();

            StartComputationThreads(results, numbersToCheck);
            var progressMonitor = new ProgressMonitor(results);

            new Thread(progressMonitor.Run)
            {
                IsBackground = true
            }.Start();


            foreach (var value in reader.ReadIntegers())
            {
                numbersToCheck.Enqueue(value);
            }


            bool wait = true;

            while (wait)
            {
                Thread.Sleep(1000); // wait for the computation to complete.
                wait = false;
            }

            Console.WriteLine("{0} of the numbers were prime first", progressMonitor.TotalCount);
        }
示例#7
0
        public void Run(NumberReader reader)
        {
            var results        = new List <long>();
            var numbersToCheck = new Queue <long>();

            StartComputationThreads(results, numbersToCheck);
            var progressMonitor = new ProgressMonitor(results);

            new Thread(progressMonitor.Run)
            {
                IsBackground = true
            }.Start();
            //lock (tart) {
            foreach (var value in reader.ReadIntegers())
            {
                numbersToCheck.Enqueue(value);
            }
            //  }
            lock (tart)
            {
                while (numbersToCheck.Count > 0)
                {
                    Thread.Sleep(100); // wait for the computation to complete.
                }
            }
            Console.WriteLine("{0} of the numbers were prime", progressMonitor.TotalCount);
        }
        public void Run(NumberReader reader)
        {
            //Start Threads.
               StartComputationThreads(CalculatorboundBuffer.getResultList(), CalculatorboundBuffer.getQueueForNumbersToCheck());
               //Start Progress Monitor.
               var progressMonitor = new ProgressMonitor(CalculatorboundBuffer.getResultList());
               //Run background threads.
               new Thread(progressMonitor.Run) { IsBackground = true }.Start();
               //Read in numbers from notepad.
               reader.ReadIntegers(CalculatorboundBuffer.getQueueForNumbersToCheck());

               while (CalculatorboundBuffer.getQueueForNumbersToCheck().Count > 0)
            {
              Thread.Sleep(100);
            }

            Console.WriteLine("{0} of the numbers were prime", progressMonitor.TotalCount);
        }
示例#9
0
        public void Run(NumberReader reader)
        {
            BoundBuff = new BoundBuffer<long>();

            StartComputationThreads(BoundBuff.GetList(), BoundBuff.GetQueue());

            var progressMonitor = new ProgressMonitor(BoundBuff.GetList());

            new Thread(progressMonitor.Run) {IsBackground = true}.Start();

            foreach (var value in reader.ReadIntegers()) {
                BoundBuff.Enqueue(value);
            }

            while (BoundBuff.GetQueue().Count > 0)
            {
                Thread.Sleep(100); // wait for the computation to complete.
            }
            Console.WriteLine("{0} of the numbers were prime", progressMonitor.TotalCount);
        }