读书人

怎么用10个线程完成1到1亿(100000000)

发布时间: 2013-06-19 10:26:41 作者: rapoo

如何用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] 这行代码中?

读书人网 >asp.net

热点推荐