void ExecuteInstances() { while (!dead) { monitor_workers.WaitOne(); GetInstance().ThreadStarted(); // While work is available int batch = currentTask.Next(); while (batch < currentTask.instances.Count) { // A single batch for (int i = batch; i < batch + batchSize && i < currentTask.instances.Count; i++) { currentTask.instances[i].SuperStep(); } batch = currentTask.Next(); } GetInstance().ThreadFinished(); } }