gpt4 book ai didi

正确关闭工作窃取线程池

转载 作者:太空宇宙 更新时间:2023-11-04 04:28:22 25 4
gpt4 key购买 nike

给定一个工作窃取线程池系统,其中每个工作项都可以在线程本地工作队列中生成新任务 - 如果已满,则可以溢出到全局队列。

您将如何安全有效地协调此类系统的关闭?假设您只有基本的原子操作和临界区锁可用。

进一步澄清和简化。假设每个线程仅从其本地工作队列中获取任务(为了简化,不会在其他线程队列之间窃取)。如果它的本地工作队列耗尽,它将锁定全局工作队列并窃取工作以添加到其本地工作队列。本地工作队列不需要锁,因为它们特定于每个工作线程。

使用简单的标志或“事件”工作线程的原子计数将不起作用,因为其他工作线程可能会将新工作溢出到全局队列中,而从另一个工作线程的角度来看,它可能认为它是唯一剩下的工作线程与工作。

只有在没有剩余工作时,所有工作人员才应退出。

最佳答案

最大的要求是有一些方法来保存每个任务的定义,以便可以将待处理任务的状态保存到持久存储中。然后实现一个“停止”标志(上面有一个互斥体)。从池中获取任务以执行的方法会检查该标志,如果已设置,则返回“终止工作线程”指示(不同于使线程等待并重试的“无可用任务”结果)。线程在获得该指示时终止,并且整个池管理线程等待直到所有工作线程都终止,然后终止池。主程序必须等到池终止并且池管理线程退出,一旦发生这种情况,就可以安全地终止程序。如果程序需要继续运行并稍后重新启动池,这也是在它可以执行任何会影响池配置或重新启动池之前必须满足的条件。

关于正确关闭工作窃取线程池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38988737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com