class Program
{
static void Main()
{
int[] mass=new int[10000];
var rand = new Random();
var sum1 = 0;
for (int i = 0; i < mass.Length; i++)
{
mass[i] = rand.Next(512);
sum1 += mass[i];
}
var sum2 = sum(mass);
Console.WriteLine("{0} {1}",sum1, sum2);
}
static int sum_simple(int[] list)
{
int evenSum = 0, oddSum = 0;
Thread computeEvens = new Thread(() =>
{
int total = 0;
for (int i = 0; i < list.Length; i += 2)
total += list[i];
evenSum = total;
});
Thread computeOdds = new Thread(() =>
{
int total = 0;
for (int i = 1; i < list.Length; i += 2)
total += list[i];
oddSum = total;
});
computeEvens.Start();
computeOdds.Start();
computeEvens.Join();
computeOdds.Join();
return evenSum + oddSum;
}
static int sum_async(int[] list)
{
Func<int[], int> computeEvens = (input) =>
{
int total = 0;
for (int i = 0; i < input.Length; i += 2)
total += input[i];
return total;
};
Func<int[], int> computeOdds = (input) =>
{
int total = 0;
for (int i = 1; i < input.Length; i += 2)
total += input[i];
return total;
};
IAsyncResult evenRes =
computeEvens.BeginInvoke(list, null, null);
IAsyncResult oddRes =
computeOdds.BeginInvoke(list, null, null);
int evenSum = computeEvens.EndInvoke(evenRes);
int oddSum = computeOdds.EndInvoke(oddRes);
return evenSum + oddSum;
}
static int sum(int[] list)
{
int evenSum = 0, oddSum = 0;
Parallel.Invoke(() =>
{
int total = 0;
for (int i = 0; i < list.Length; i += 2)
total += list[i];
evenSum = total;
}, () =>
{
int total = 0;
for (int i = 1; i < list.Length; i += 2)
total += list[i];
oddSum = total;
});
return evenSum + oddSum;
}
Comments