我的思路是分10个区间, 每个区间是 1/10 的数字, 然后每个线程计算一个区间的和, 待每个线程都计算完成之后, 统计总和 total. 如何判断10个线程都计算完成了呢? 前提:不要用 Parallel Task , 鄙人是 framework3.5, 谢谢……

解决方案 »

  1.   

    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());
            }
        }
    }
      

  2.   

    不知为何发不了图片, 提示:索引超出了数组界限。 Line : 20
      

  3.   

    ....i 为什么会是10 是不是因为 最后一次 i++ = 10 的时候,循环不满足条件,..但同时有一个线程正好运行在result[i] 这行代码中?