C# 多线程问题

一个线程中嵌套多个子线程,子线程中又嵌套多个子线程,子线程又嵌套多个线程。主线程需要在这些子线程全部工作完成之后在执行(因为主线程需要子线程产生的数据,而所有的子线程产生... 一个线程中 嵌套 多个子线程,子线程中又嵌套多个子线程,子线程又嵌套多个线程。主线程 需要在这些子线程全部工作完成之后在执行(因为主线程需要子线程产生的数据,而所有的子线程产生的数据才是一个完整的)。 现在不知道怎么处理,让主线程等待子线程全部完成在进行。 展开
 我来答
whm412
2013-02-04 · TA获得超过515个赞
知道小有建树答主
回答量:289
采纳率:66%
帮助的人:276万
展开全部
你的这个问题还真不好处理,线程套线程,还想等待全部完成,如果不想改设计的话,就使用ManualResetEvent这个对象,每次线程创建子线程时,都创建这个对象,保证所有的线程都执行完毕再将阻塞放开。(可采用计数方式,开始记录需要创建多少个线程,再记录一个变量(原子型)每个子线程完成时都将变量值加1,如果变量值==线程个数时,则将这个对象Set())

但是这样的效率真是不好说,多线程的目的就是想更快,并且是可并发的处理事情,你这样设计就快不哪去啊。

设置全局变量,这个不可取,在多线程中,如果只有一层这样的线程,还可控,如果层数多了,又是加又是减的,根本控制不了。最后出问题都不知道怎么分析,多线程在分析问题时,有些问题还可重现,有些问题十次能重现一次就不错了。

也在做这方面的研究,有时间可以交流一下,看看你们的设计。
追问
嗯,可以加我QQ1045112466. 其实我并不想这么设计,实际的问题就是这个情况,这嵌套是因为上层的结果决定了下层的一些东西,比如开多少线程,线程需要的数据等。
bxfc
2013-02-04 · TA获得超过872个赞
知道小有建树答主
回答量:1104
采纳率:0%
帮助的人:671万
展开全部
用线程池wait

或者用线程join都可以达到你的要求。
更多追问追答
追问
全部用join能达到效果。 用线程池wait 可行吗?我做的目的是提供并发。
追答
可行啊。反正你是所有子线程完成后才能生成最后结果,那你把所有的都Wait呗,都wait完后,继续你的主线程不就是最后的结果了米

和Join没差的啦,都是在等待所有子线程执行完。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Hope_李
2013-02-04 · TA获得超过141个赞
知道小有建树答主
回答量:329
采纳率:33%
帮助的人:197万
展开全部
设一个全局集合变量。每开一个子线程就往集合里添加一个数据。
每个子线程完成时移除一个数据,在检查集合里是否有数据。如果没有数据就可以通知主线程,所有线程都完成了。
追问
当所有线程处理完成后,怎么通知主线程。思路我觉得可以,但如何处理我还不明白。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
313864740
2013-02-04
知道答主
回答量:10
采纳率:0%
帮助的人:4.1万
展开全部
线程里面加入判断传入一个bool型变量 当线程完成后给bool赋值 当传入的bool类型改变时就能判断出是否完成了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式