由于线程连接导致逻辑的顺序执行,首先在多个线程之间划分任务的动机是什么?换句话说,我无法想象一个真正需要线程连接的场景。
答案 0 :(得分:5)
如果要启动多个线程,可以使用join()
,然后等待所有线程完成。
例如,启动5个工作项,每个工作项在自己的线程中,然后在5个线程上调用join()
将允许您同时处理所有5个项目,但阻塞直到它们全部完成。
请注意,许多语言/框架比明确加入线程有更好的选择。例如,在.NET世界中,TPL允许您安排在一个或多个任务(如果需要可以映射到线程)完成时发生的延续。
答案 1 :(得分:3)
有时你想要一堆并发的事情发生,当它们全部完成时,你想要结合他们所有的结果并继续前进。
以一个Web门户主页为例,它需要在服务器端为一堆独立的小部件加载数据。您可以并行启动这些数据加载,然后在渲染整个页面之前让主线程加入(即等待它们完成)。
答案 2 :(得分:2)
在某些情况下,您可能会将相似的任务分发给一堆线程,但您需要完成所有这些任务才能获得您正在寻找的“答案”。
例如,如果您正在制作国际象棋游戏,您可以将各种动作分发给各个线程,然后等到它们全部完成后再选择“最佳”线程。
答案 3 :(得分:-4)
它没有用,因为它比人类已知的任何其他线程间通信机制有更多的缺点。它积极鼓励糟糕的多线程设计,具有提高开销和防止进程关闭的高潜力,尤其是在GUI应用程序中。
如果可以避免使用它,请执行此操作。