未将ManualResetEvent设置为true
本文关键字:true 设置 ManualResetEvent 未将 | 更新日期: 2023-09-27 17:59:21
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
具有"Thread
"类的21个实例的列表,而"productBuilders
"具有3个构造器。在这种情况下,从CustomThreadPool获取的线程计数将为"3"。比方说,如果我没有在3个"GetAndMapProduct
"调用中的任何一个中对ManualResetEvent
对象设置"Set((/true",那么这3个线程会发生什么。我的意思是,如果我在上面的代码上循环7次,每次获取3个线程,并且没有设置ManualResetEvent
,我就不能使用CustomThreadPool类吗?,因为CustomThreadPool假设所有(7*3(线程都忙于工作,并且没有任何空闲线程可分配?;
您没有提供任何代码来表明ManualResetEvent
以任何方式影响这3个线程。它们唯一会影响的(基于您的代码(是通过调用WaitAll
来访问当前线程,根据您提供和描述的内容,这将是一个死锁。
如果您只在同一进程中管理不同的线程,我还建议您使用ManualResetEventSlim
(http://msdn.microsoft.com/en-us/library/system.threading.manualreseteventslim.aspx)相反,尤其是如果你在GetAndMapProduct
中做的事情相当快的话。但是,现在还不清楚你想要实现什么。