gpt4 book ai didi

c# - 我如何确定我的所有线程何时完成执行?

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

我有一个架构,它从一个打包的二进制文件中读取数据包,根据数据包类型将每个数据包分配给一个单独的处理管道,并在管道的另一端将数据包重新组合到一个新文件中。每个管道都包含类似于 this one. 的阻塞队列

每个管道中的阻塞队列的每一侧都有一个线程,该线程运行一个循环来对数据包进行排队或出队。这些线程从 Controller 对象异步启动(即“即发即弃”风格)。这个 Controller 对象有一个 Dictionary<int, ChannelPipeline>包含所有管道对象的集合。

这是我的问题:我可以采用什么机制来告诉我所有管道何时完成处理?有一个 EndOfData每条管道的属性(property);我是否必须在每个管道上连续轮询该属性,直到它们都读取 true ,还是有更好(即更有效)的方式?

最佳答案

如果你知道管道的总数,你可以考虑AutoResetEvent + integer counter

AutoResetEvent allThreadsDone = new AutoResetEvent(false);
int completedThreads;
int scheduledThreads;

基本上每个工作线程都会增加它使用的值 Interlocked.Increment() 并设置事件以防它是最后一个线程:

Interlocked.Increment(ref completedThreads);
if (completedThreads == scheduledThreads)
{
allThreadsDone.Set();
}

在监控线程中你只需要做:

 allThreadsDone.WaitOne();
// here is we know that all threads are finished

关于c# - 我如何确定我的所有线程何时完成执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7043258/

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