如何用10个线程完成1到1亿(100000000)的计算?

吉普赛的歌 2013-06-06 10:17:49
我的思路是分10个区间, 每个区间是 1/10 的数字, 然后每个线程计算一个区间的和, 待每个线程都计算完成之后, 统计总和 total.

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

前提:不要用 Parallel Task , 鄙人是 framework3.5, 谢谢……
...全文
299 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉普赛的歌 2013-06-10
  • 打赏
  • 举报
回复
咋这么没有人气呢?
吉普赛的歌 2013-06-08
  • 打赏
  • 举报
回复
引用 6 楼 caozhy 的回复:
i怎么会是10呢?
老大, 你运行过吗?
yczhouhy 2013-06-08
  • 打赏
  • 举报
回复
....i 为什么会是10 是不是因为 最后一次 i++ = 10 的时候,循环不满足条件,..但同时有一个线程正好运行在result[i] 这行代码中?
IssacChow 2013-06-07
  • 打赏
  • 举报
回复
(1-10)*10=(10-100),递归过去~数值扩大?
threenewbee 2013-06-07
  • 打赏
  • 举报
回复
i怎么会是10呢?
吉普赛的歌 2013-06-07
  • 打赏
  • 举报
回复
不知为何发不了图片, 提示:索引超出了数组界限。 Line : 20
吉普赛的歌 2013-06-07
  • 打赏
  • 举报
回复
吉普赛的歌 2013-06-07
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
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());
}
}
}

threenewbee 2013-06-06
  • 打赏
  • 举报
回复
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());
        }
    }
}

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧