Parallel Extension - вопрос по SortedList<>
От: denisio_mcp  
Дата: 21.03.10 11:31
Оценка:
Есть метод, в котором рассчитывается расположение знаков на карте. Расчет послойный, помимо задачи наложения там есть еще ряд условий. Обработка каждого слоя по сути не зависит от других, за исключением одного — надо проверять наложение знаков друг на друга. Причем критерий неналожения знаков друг на друга достаточно мягок — не имеет значения на каком слое знак будет показываться в данной точек, а на каком нет, главное чтобы они друг на друга не налезали.

Собственно, напрашивается Parallel.For и все работает здорово если убрать проверку наложения. Для того, чтобы проверять наложения — надо обратиться к общему списку, который формируется в момент обработки слоев (другими потоками — других слоев). И тут засада — поток, запускаемый из Parallel.For ругается, что коллекция изменена после запуска потока. С Dictionary все просто решилось — ConcurrentDictionary, а вот SortedList<> не могу также завернуть. Каким образом обращаться к динамически формируемому списку из потока в данном случае?
... << RSDN@Home 1.2.0 alpha 4 rev. 1088>>
Re: Parallel Extension - вопрос по SortedList<>
От: denisio_mcp  
Дата: 22.03.10 08:20
Оценка:
Здравствуйте, denisio_mcp, Вы писали:

_>Есть метод, в котором рассчитывается расположение знаков на карте. Расчет послойный, помимо задачи наложения там есть еще ряд условий. Обработка каждого слоя по сути не зависит от других, за исключением одного — надо проверять наложение знаков друг на друга. Причем критерий неналожения знаков друг на друга достаточно мягок — не имеет значения на каком слое знак будет показываться в данной точек, а на каком нет, главное чтобы они друг на друга не налезали.


_>Собственно, напрашивается Parallel.For и все работает здорово если убрать проверку наложения. Для того, чтобы проверять наложения — надо обратиться к общему списку, который формируется в момент обработки слоев (другими потоками — других слоев). И тут засада — поток, запускаемый из Parallel.For ругается, что коллекция изменена после запуска потока. С Dictionary все просто решилось — ConcurrentDictionary, а вот SortedList<> не могу также завернуть. Каким образом обращаться к динамически формируемому списку из потока в данном случае?


Отмена. Мораль: использовать lock при добавлении и проверки коллекции. Еще подвела невнимательность — ошибка гласила не "после старта потока", а "после старта enumeration".
... << RSDN@Home 1.2.0 alpha 4 rev. 1088>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.