OpenMP, C++ и итераторы

Для цикличного выполнения по элементам контейнера я обычно использовал бы итератор, как так:

container<type> myContainer;
// fill up the container
container<type>::iterator it;
for(it=myContainer.begin(); it!=myContainer.end(); ++it) {
   //do stuff to the elements of the container
}

Теперь, если я хочу параллелизировать цикл с помощью OpenMP, я мог бы попробовать что-то как:

container<type> myContainer;
// fill up the container
container<type>::iterator it, it_begin=myContainer.begin(), it_end=myContainer.end();
#pragma omp parallel for default(none) private(it) shared(it_begin, it_end)
for(it=it_begin; it!=it_end; ++it) {
   //do stuff to the elements of the container
}

Однако то, когда я работаю, сказало, что код, изменения не внесены в контейнер. Если, однако, я использую типичную индексацию на контейнере, параллельный код хорошо работает. То, что я задаюсь вопросом, - то, если возможно использовать итераторы в контексте OpenMP, или если я должен преобразовать выполненный с помощью итераций цикл в индексируемый цикл?

5
задан MarkD 30 June 2010 в 16:44
поделиться