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); }
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(); } }