.NET 4.x Parallel.for подсчитать количество элементов в массиве - C#

Узнай цену своей работы

Формулировка задачи:

Собственно необходимо посчитать количество элементов в двумерном массиве удовлетворяющих определенным условиям. Так как сам массив очень большой решил распараллелить задачу.
        public Int64 GetCountDead()
        {
            Int64 count = 0;
            Parallel.For(0, SizeX, x =>
            {
                for (var y = 0; y < SizeY; y++)
                {
                    if (isDead(_map[x, y]))
                    {
                        count++;
                    }
                }
            });
            return count;
        }
Но оно работает не верно, что логично, так как код не потокобезопасен. То есть на одинаковом массиве может выдать как 2050 так и 2428 или 2602 ну итд.. как это написать верно?

Решение задачи: «.NET 4.x Parallel.for подсчитать количество элементов в массиве»

textual
Листинг программы
private readonly Object _thisLock = new Object();
        public Int64 GetCountDead()
        {
            Int64 count = 0;
            Parallel.For(0, SizeX, x =>
            {
                var threadResult = 0;
                for (var y = 0; y < SizeY; y++)
                {
                    if (isDead(_map[x, y]))
                    {
                        threadResult++;
                    }
                }
                lock (_thisLock)
                {
                    count += threadResult;
                }
            });
            return count;
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.8 из 5
Похожие ответы