andruhovski icon

Parallel Demo

andruhovski | PRO | 09/13/18 05:52:32 AM UTC | 0 ⭐ | 721 👁️ | Never ⏰ | []
C# |

2.62 KB

|

None

|

0 👍

/

0 👎

 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