+ -
当前位置:首页 → 问答吧 → 菜鸟求助多线程的一些问题……(这分对于懂的人应该很好拿)

菜鸟求助多线程的一些问题……(这分对于懂的人应该很好拿)

时间:2011-12-27

来源:互联网

我是个C#菜鸟,刚刚设计线程有点弄得云里雾里。所以希望各位高手帮我一把,我觉得入门往往就是自己怎么也琢磨不透,但只要点一下就通了。谢谢啦。
我想用主线程同时启动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