C# 多线程问题
一个线程中嵌套多个子线程,子线程中又嵌套多个子线程,子线程又嵌套多个线程。主线程需要在这些子线程全部工作完成之后在执行(因为主线程需要子线程产生的数据,而所有的子线程产生...
一个线程中 嵌套 多个子线程,子线程中又嵌套多个子线程,子线程又嵌套多个线程。主线程 需要在这些子线程全部工作完成之后在执行(因为主线程需要子线程产生的数据,而所有的子线程产生的数据才是一个完整的)。 现在不知道怎么处理,让主线程等待子线程全部完成在进行。
展开
4个回答
展开全部
你的这个问题还真不好处理,线程套线程,还想等待全部完成,如果不想改设计的话,就使用ManualResetEvent这个对象,每次线程创建子线程时,都创建这个对象,保证所有的线程都执行完毕再将阻塞放开。(可采用计数方式,开始记录需要创建多少个线程,再记录一个变量(原子型)每个子线程完成时都将变量值加1,如果变量值==线程个数时,则将这个对象Set())
但是这样的效率真是不好说,多线程的目的就是想更快,并且是可并发的处理事情,你这样设计就快不哪去啊。
设置全局变量,这个不可取,在多线程中,如果只有一层这样的线程,还可控,如果层数多了,又是加又是减的,根本控制不了。最后出问题都不知道怎么分析,多线程在分析问题时,有些问题还可重现,有些问题十次能重现一次就不错了。
也在做这方面的研究,有时间可以交流一下,看看你们的设计。
但是这样的效率真是不好说,多线程的目的就是想更快,并且是可并发的处理事情,你这样设计就快不哪去啊。
设置全局变量,这个不可取,在多线程中,如果只有一层这样的线程,还可控,如果层数多了,又是加又是减的,根本控制不了。最后出问题都不知道怎么分析,多线程在分析问题时,有些问题还可重现,有些问题十次能重现一次就不错了。
也在做这方面的研究,有时间可以交流一下,看看你们的设计。
追问
嗯,可以加我QQ1045112466. 其实我并不想这么设计,实际的问题就是这个情况,这嵌套是因为上层的结果决定了下层的一些东西,比如开多少线程,线程需要的数据等。
展开全部
用线程池wait
或者用线程join都可以达到你的要求。
或者用线程join都可以达到你的要求。
更多追问追答
追问
全部用join能达到效果。 用线程池wait 可行吗?我做的目的是提供并发。
追答
可行啊。反正你是所有子线程完成后才能生成最后结果,那你把所有的都Wait呗,都wait完后,继续你的主线程不就是最后的结果了米
和Join没差的啦,都是在等待所有子线程执行完。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
设一个全局集合变量。每开一个子线程就往集合里添加一个数据。
每个子线程完成时移除一个数据,在检查集合里是否有数据。如果没有数据就可以通知主线程,所有线程都完成了。
每个子线程完成时移除一个数据,在检查集合里是否有数据。如果没有数据就可以通知主线程,所有线程都完成了。
追问
当所有线程处理完成后,怎么通知主线程。思路我觉得可以,但如何处理我还不明白。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
线程里面加入判断传入一个bool型变量 当线程完成后给bool赋值 当传入的bool类型改变时就能判断出是否完成了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询