В стандарте OpenMP рассматриваются только С++ 98 (ISO/IEC 14882: 1998). Это означает, что нет стандартного поддерживающего использования OpenMP в С++ 03 или даже С++ 11. Таким образом, любая программа, использующая С++ > 98 и OpenMP, работает вне стандартов, подразумевая, что даже если она работает при определенных условиях, она вряд ли будет переносной, но определенно никогда не будет гарантирована.
Ситуация еще хуже с С++ 11 с собственной поддержкой многопоточности, которая, скорее всего, столкнется с OpenMP для определенных реализаций.
Итак, насколько безопасно использовать OpenMP с С++ 03 и С++ 11?
Можно ли безопасно использовать многопоточность С++ 11, а также OpenMP в одной и той же программе, но не чередуя их (т.е. никакой оператор OpenMP в любом коде, переданном на параллельные функции С++ 11, и не С++ 11 concurrency в потоках, порожденных OpenMP)?
Меня особенно интересует ситуация, когда я сначала вызываю некоторый код с помощью OpenMP, а затем другой код с использованием С++ 11 concurrency в тех же структурах данных.