gpt4 book ai didi

c# - 在多个线程中处理堆栈项

转载 作者:行者123 更新时间:2023-11-30 16:19:02 25 4
gpt4 key购买 nike

我有一个 ConcurrentStack ,其中的每一项都是一些网络资源的 URL。我还有 N 个线程(实际上是 Tasks),每个线程从堆栈进程中弹出一个项目并将结果(结果是集合)添加到此堆栈或其他输出队列,具体取决于某些条件。应该这样做,直到堆栈变空。

识别此进程结束并停止此任务的更优雅的方法是什么?换句话说,如何识别栈是空的,没有正在执行的任务会向栈中添加更多的项目

最佳答案

终止条件似乎是当所有从栈中读取的任务都在等待一个项目被堆入栈中。当然,这只有在您为您的任务提供一种被动等待该事件的方法时才会发生。正如其他答案所建议的那样,您可以在 ConcurrentStack 类之上使用 BlockingCollection 来实现同步。

关于终止,最简单的方法是让一个任务(终止任务)等待该条件,所有其他任务操作一个表示等待任务数的整数,在阻塞集合之前递增它,并在阻塞时递减它获得一个项目。当该数量达到堆栈的可能读者总数时,当前尝试获取项目的任务会在阻塞集合之前触发条件变量,这将唤醒终止线程。

关于c# - 在多个线程中处理堆栈项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15542762/

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