【发布时间】:2013-02-14 12:36:16
【问题描述】:
List<ManualResetEvent> doneEventsList = new List<ManualResetEvent>();
productBuilders.ForEach(productBuilder =>
{
doneEventsList.Add(productBuilder.GetDoneEvent());
CustomThreadPool.getSingletonInstance.QueueUserWorkItem(productBuilder.GetAndMapProduct, new Object());
});
WaitHandle.WaitAll(doneEventsList.ToArray());
我对上面的代码有点怀疑,
假设CustomThreadPool 有 21 个“Thread”类实例的列表,而“productBuilders”有 3 个构建器。在这种情况下,从 CustomThreadPool 获取的线程计数将为“3”。可以说,如果我在这 3 个 'GetAndMapProduct' 调用中的任何一个中都没有在 ManualResetEvent 对象上设置 'Set()/true',那么这 3 个线程会发生什么。我的意思是,如果我在代码上方循环 7 次并且每次获取 3 个线程而不设置 ManualResetEvent,我就不能使用 CustomThreadPool 类吗?因为 CustomThreadPool 假设所有(7*3)线程都忙于它们的工作并且它没有任何空闲线程可以分配?;
【问题讨论】:
-
线程池调度程序(即使是自定义调度程序)的工作是不让所有线程同时启动。
标签: c# .net multithreading c#-4.0