Esempio n. 1
0
        public static List<IHasBits> FilterList_UsingWorkers(this List<IHasBits> sourceList, Func<IHasBits, bool> filter, int numThreads)
        {
            List<IHasBits> rv = new List<IHasBits>();

            var slices = NumbersUtil.GetSliceBounds(0, sourceList.Count,  numThreads > sourceList.Count ? sourceList.Count : numThreads );
            var workers = new HasBitsFilterWorker[slices.Length];
            for (int i = 0; i < slices.Length; i++)
                workers[i] = new HasBitsFilterWorker(slices[i][0], slices[i][1], sourceList, filter);

            foreach (var w in workers)
                w.Thread.Join();

            for (int i = 0; i < workers.Length; i++)
                rv.AddRange(workers[i].Accumulator);

            return rv;
        }
Esempio n. 2
0
        public static List <IHasBits> FilterList_UsingWorkers(this List <IHasBits> sourceList, Func <IHasBits, bool> filter, int numThreads)
        {
            List <IHasBits> rv = new List <IHasBits>();

            var slices  = NumbersUtil.GetSliceBounds(0, sourceList.Count, numThreads > sourceList.Count ? sourceList.Count : numThreads);
            var workers = new HasBitsFilterWorker[slices.Length];

            for (int i = 0; i < slices.Length; i++)
            {
                workers[i] = new HasBitsFilterWorker(slices[i][0], slices[i][1], sourceList, filter);
            }

            foreach (var w in workers)
            {
                w.Thread.Join();
            }

            for (int i = 0; i < workers.Length; i++)
            {
                rv.AddRange(workers[i].Accumulator);
            }

            return(rv);
        }