Реентерабельность и STL
От: _hum_ Беларусь  
Дата: 25.04.18 15:56
Оценка:
Хотелось бы узнать, как на данный момент обстоит дело с гарантиями правомерности использования функций STL в параллельном программировании. Например, насколько я могу рассчитывать, что тот же распараллеленный средствами OpenMPI цикл наподобие
const long nSize = 100000;

std::vector<float> v(nSize);

#pragma omp parallel for
for (long i = 0; i < nSize; ++i)
  v[i] = sqrt(i);

будет корректно работать (оператор доступа к элементу вектора реентерабельный)?

Из того, что попалось на глаза — на stackoverflow:

The standard says:
Except where explicitly specified in this standard, it is implementation-defined which functions in the Standard C++ library may be recursively reentered.

И там же дальше проводятся рассуждения, что такой подход довольно ограничительный, и что намного разумнее:

The standard should mandate that all standard functions must be reentrant, unless otherwise specified.

I would

completely ignore the possibility of of any standard function being non-reentrant, except when it is clear that the function cannot be reasonably made reentrant.


В связи с чем вопрос — может, уже ввели какое-нибудь понятие наподобие "внутренне/изначально реинтерабельный", означающее, что функция реинтерабельна, если только нет возможности привнести нарушение реинтерабельности извне (через аргументы функции, шаблоны типов)?

Если же нет, как в таком случае работать с STL в OpenMPI — полностью переводить на указатели?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.