菜鸟求助多线程的一些问题……(这分对于懂的人应该很好拿)
时间:2011-12-27
来源:互联网
我是个C#菜鸟,刚刚设计线程有点弄得云里雾里。所以希望各位高手帮我一把,我觉得入门往往就是自己怎么也琢磨不透,但只要点一下就通了。谢谢啦。
我想用主线程同时启动n个子线程实例Func1,Func2...FuncN,每个子线程均是去执行Calculate算法,算出结果的子线程(设FuncX)立刻传递结果给主线程,之后主线程会强行结束其他未算出结果的线程,并且保留FuncX实例。然后进行第二步计算。
第二步计算的逻辑如同第一步,也是并发计算然后竞争剩下一个。但这次需要把FuncX复制多份每份作为一个子线程继续去执行Calculate,因为FuncClass的实例在第一次计算过程中,会产生一些数据a_1,a_2,a_3,这些在第二次计算的时候会用到,所以没法重新实例化一个FuncClass。
然后是第三步计算。。第四步。。。
我想问这样的一个计算逻辑是否可以实现?我主要困惑在主线程子线程传递参数的同时还要加上一个“竞争”的机制,然后就是怎么把“获胜”的实例复制再计算。
C# code
我想用主线程同时启动n个子线程实例Func1,Func2...FuncN,每个子线程均是去执行Calculate算法,算出结果的子线程(设FuncX)立刻传递结果给主线程,之后主线程会强行结束其他未算出结果的线程,并且保留FuncX实例。然后进行第二步计算。
第二步计算的逻辑如同第一步,也是并发计算然后竞争剩下一个。但这次需要把FuncX复制多份每份作为一个子线程继续去执行Calculate,因为FuncClass的实例在第一次计算过程中,会产生一些数据a_1,a_2,a_3,这些在第二次计算的时候会用到,所以没法重新实例化一个FuncClass。
然后是第三步计算。。第四步。。。
我想问这样的一个计算逻辑是否可以实现?我主要困惑在主线程子线程传递参数的同时还要加上一个“竞争”的机制,然后就是怎么把“获胜”的实例复制再计算。
C# code
class mainthread { public mainthread() { FuncClass Func1=new FuncClass(); thdSubThread = new Thread(new ThreadStart(Func.Calculate)); thdSubThread.Start(); FuncClass Func2 = new FuncClass(); thdSubThread = new Thread(new ThreadStart(Func.Calculate)); thdSubThread.Start(); //....; } } class FuncClass { private object a_1; private object a_2; private object a_3; public string Calculate(string para) //这样的方法貌似没法当线程启动,我只是示意一下,我希望主线程传进去参数,传出来结果…… { //.....; } }
作者: zouyong311 发布时间: 2011-12-27
竞争就用一个锁好了,锁就是FuncClass的对象,子线程计算完成后发现锁是空的就对锁赋值,如果锁有值就退出。主线程检测到这个锁有值了,就把对象取出来,杀掉所有线程,然后通过FuncClass对象提供的一个Clone方法,复制N份,继续起N个线程计算。
作者: wddw1986 发布时间: 2011-12-27
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28