日期:2014-05-17  浏览次数:20419 次

如何用10个线程完成1到1亿(100000000)的计算?
我的思路是分10个区间, 每个区间是 1/10 的数字, 然后每个线程计算一个区间的和, 待每个线程都计算完成之后, 统计总和 total. 

如何判断10个线程都计算完成了呢? 

前提:不要用 Parallel Task , 鄙人是 framework3.5, 谢谢……

------解决方案--------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] Args)
        {
            int[] data = Enumerable.Range(1, 1000000).ToArray();
            double[] result = new double[10];
            ManualResetEvent[] manualEvents = result.Select(x => new ManualResetEvent(false)).ToArray();
            for (int i = 0; i < 10; i++)
            {
                var ts = new ThreadStart(() => 
                { 
                    result[i] = data.Skip(i * 100000).Take(100000).Select(x => (double)x).Sum(); 
                    manualEvents[i].Set(); 
                });
                new Thread(ts).Start();
            }
            WaitHandle.WaitAll(manualEvents.ToArray());
            Console.WriteLine(result.Sum());
        }
    }
}

------解决方案--------------------
(1-10)*10=(10-100),递归过去~数值扩大?
------解决方案--------------------
i怎么会是10呢?
------解决方案--------------------
....i 为什么会是10 是不是因为 最后一次 i++ = 10 的时候,循环不满足条件,..但同时有一个线程正好运行在result[i] 这行代码中?