예제 #1
0
 public ParallelForRun(int numUnits, int first, ParallelForIterationDelegate iterationRun)
 {
     m_first = first;
     m_numUnits = numUnits;
     m_iterationRun = iterationRun;
     m_nextUnitIndex = 0;
     m_numFinishedUnits = 0;
     m_joinEvent = new EventWaitHandle(false, EventResetMode.AutoReset);
 }
예제 #2
0
        public static void For(SBThreadPool pool, int inclusiveStart, int exclusiveEnd, ParallelForIterationDelegate iterate)
        {
            if(inclusiveStart >= exclusiveEnd)
                return;

            using (ParallelForRun loopRun = new ParallelForRun(exclusiveEnd - inclusiveStart, inclusiveStart, iterate))
            {
                for (int i = 0; i < pool.NumThreads; i++)
                {
                    SBJob job = new ParallelForJob(loopRun);
                    job.QueueInPool(pool);
                }
                loopRun.ThreadRunIterations();
                loopRun.Join();
            }
        }