.NET 4.x Parallel.for подсчитать количество элементов в массиве - C#
Формулировка задачи:
Собственно необходимо посчитать количество элементов в двумерном массиве удовлетворяющих определенным условиям.
Так как сам массив очень большой решил распараллелить задачу.
Но оно работает не верно, что логично, так как код не потокобезопасен.
То есть на одинаковом массиве может выдать как 2050 так и 2428 или 2602 ну итд..
как это написать верно?
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; }
Решение задачи: «.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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д