Пример #1
0
        public void Sort()
        {
            if (ThreadCount == 0)
            {
                throw new InvalidOperationException("Threads property not set and default value 0 is not valid.");
            }

            if (ThreadCount == 1)
            {
                Result = Copies.GetRange(_startI, _count);
                Result.Sort(_comparer);
            }
            else
            {
                var leftSon = new ParallelSorter(_startI, _count / 2);
                leftSon.ThreadCount = ThreadCount / 2;
                leftSon.Copies      = Copies;
                var leftThread = new Thread(leftSon.Sort);
                var rightSon   = new ParallelSorter(_startI + _count / 2, _count - _count / 2);
                rightSon.ThreadCount = (ThreadCount + 1) / 2;
                rightSon.Copies      = Copies;
                var rightThread = new Thread(rightSon.Sort);

                leftThread.Start();
                rightThread.Start();

                leftThread.Join();
                rightThread.Join();
                Result = new List <Copy>();
                Merge(leftSon.Result, rightSon.Result);
            }
        }
Пример #2
0
        public List <Copy> ExecuteQuery()
        {
            if (ThreadCount == 0)
            {
                throw new InvalidOperationException("Threads property not set and default value 0 is not valid.");
            }

            bool Filter(Copy copy)
            {
                var shelf = copy.Book.Shelf;

                return(copy.State == CopyState.OnLoan && shelf[shelf.Length - 1] >= 'A' && shelf[shelf.Length - 1] <= 'Q');
            }

            var filteredCopies = FilterCopies(Library.Copies, Filter);
            var sorter         = new ParallelSorter(0, filteredCopies.Count)
            {
                Copies = filteredCopies, ThreadCount = ThreadCount
            };

            sorter.Sort();
            return(sorter.Result);
        }