【发布时间】:2025-12-19 06:10:11
【问题描述】:
我有一个产生大约 20 个工作线程的主线程。
我需要停止主线程,直到所有其他线程都完成。
我知道(线程)。加入。但这仅适用于一个线程。
多个连接会像这样损害性能。
t1.Join()
t2.Join()
...
t20.Join()
因为程序一个接一个地等待每个停止。
我将如何做到这一点 主线程等待所有一组线程结束?
【问题讨论】:
-
这是理想的行为,对吧?它首先等待 t1 并不重要(虽然 t3 可能已经完成),最后,当 callstackpointer 越过
t20.Join;你知道所有线程都已停止。 -
像糖果一样对待线程是一个常见的错误。仅当您的机器具有至少 20 个 CPU 内核时才启动 20 个线程。开始更多实际上会减慢您的程序。为这么多线程获得正确的锁定也非常困难,您通常只是让线程相互等待。
-
基本上,我必须将 20 个不同的文件加载到我的程序中。线程不必交互。无论计算机有多少内核,我都希望它能够正常工作。另外,我需要主程序等到所有 20 个文件都打开。
-
其实,如果都是 IO-bound 的话,启动 20 个线程也不一定是异常的。
标签: c# multithreading c#-4.0