5

由于线程连接导致逻辑的顺序执行,那么首先在多个线程之间划分任务的动机是什么?换句话说,我无法想象出实际需要线程连接的真实场景。

4

4 回答 4

5

如果要启动多个线程,则可以使用join(),然后等到所有线程都完成。

例如,启动 5 个工作项,每个工作项在各自的线程中,然后调用join()5 个线程将允许您同时处理所有 5 个项目,但会阻塞直到它们全部完成。

请注意,许多语言/框架有比明确加入线程更好的选择。例如,在 .NET 世界中,TPL 允许您安排在一个或多个任务(如果需要,可以映射到线程)全部完成时发生的延续。

于 2013-10-03T16:20:29.027 回答
3

有时你想要一堆并发的事情发生,当它们都完成后,你想要结合它们的所有结果并继续前进。

以需要为服务器端的一堆独立小部件加载数据的门户网站主页为例。您可以并行启动这些数据加载,然后在呈现整个页面之前让主线程加入这些数据(即等待它们完成)。

于 2013-10-03T16:21:49.107 回答
2

在某些情况下,您可能会将类似的任务分发给一堆线程,但您需要全部完成才能获得您正在寻找的“答案”。

例如,如果您正在制作一个国际象棋游戏,您可以将潜在的一组移动分配给各个线程,然后等待它们全部完成,然后再选择“最佳”一个。

于 2013-10-03T16:21:35.073 回答
-4

它没有用,因为它比人类已知的任何其他线程间通信机制都有更多的缺点。它积极鼓励糟糕的多线程设计,这很有可能增加开销和防止进程关闭,尤其是。在 GUI 应用程序中。

如果您可以避免使用它,请这样做。

于 2013-10-03T16:41:13.973 回答