如何在n个线程完成工作之前停止一个线程

Ign*_*cia 4 .net multithreading synchronization locking .net-3.5

我有一个主线程和N个工作线程的应用程序.在某些时候,我需要主线程等待,直到所有N个线程完成了他们工作的一部分.

我通常会使用Monitor.Wait()和Monitor.Pulse()但这会阻止N个线程同时工作.

有关如何做到这一点的任何想法?

提前致谢.

Jus*_*tch 8

.NET 4.0将包含System.Threading.Barrier将使多个线程之间的同步更容易的类.可以在此处找到包含一些优秀示例代码的博客文章.

使用.NET 3.0+中的多个WaitHandle 可以实现类似的功能,如MSDN上的此示例所示.

MSDN示例的简短摘要:

const int numberOfWorkers = 5;

static void Main()
{
    var handles = new ManualResetEvent[numberOfWorkers];

    for (int i = 0; i < numberOfWorkers; i++)
    {
        handles[i] = new ManualResetEvent(false);
        ThreadPool.QueueUserWorkItem(o => worker.Work(), null);
    }

    // Wait for all workers to finish before continuing
    WaitHandle.WaitAll(handles);
    /* continue execution... */
}
Run Code Online (Sandbox Code Playgroud)