Многопоточность с C ++ API - PullRequest
5 голосов
/ 29 июня 2011

Я пытаюсь распараллелить мою программу, используя OpenMP, и иногда мне кажется, что я захожу в тупик.

Я хотел бы поделиться переменными в элементе функции, который я определил (и инициализировал) в классе,Если я правильно понял, невозможно сделать #pragma omp parallel shared(foo) членов данных (например, int, boost::multi_array и std::vector) класса.Например: использование push_back () для члена векторных данных в классе.Обновление значений boost::multi_array.

Мой вопрос, является ли OpenMP подходящим инструментом для него, или я должен использовать boost :: thread или tbb?или что-то еще ... что поддерживает C ++ API

Reagrds

1 Ответ

1 голос
/ 29 июня 2011

Как указано в документации , shared определяет, что объект помещается в память только один раз.Например, если ваш foo объект содержит std::vector некоторого типа, он должен быть в полном порядке для push_back элементов в цикле.Но вы должны убедиться, что ваш код является потокобезопасным, либо с помощью атомарных инструкций, либо с разделами мьютекса.

...