using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Prog20180921 { class Program { static void Main(string[] args) { int[] arr1 = new int[1000000]; var rand = new Random(); for (int i = 0; i < arr1.Length; i++) { arr1[i]=rand.Next(100,300); } var time1 = DateTime.Now.Millisecond; long res1 = OneThread(arr1); var time2 = DateTime.Now.Millisecond; long res2 = ParallelThread(arr1); var time3 = DateTime.Now.Millisecond; Console.WriteLine("{0} {1}", time2-time1, time3-time2); } private static long ParallelThread(int[] arr) { int numCores = Environment.ProcessorCount; object[] locks = new object[numCores]; for (int i = 0; i < locks.Length; ++i) locks[i] = new object(); long[] sums = new long[numCores]; Parallel.For(0, arr.Length, (i) => { lock (locks[i % numCores]) sums[i % numCores] += arr[i]; }); long res = 0; foreach (var item in sums) res += item; return res; } private static long OneThread(int[] arr) { long res = 0; for (int i = 0; i < arr.Length; i++) { res += arr[i]; } return res; } } }