OpenMP标准仅支持C++ 98 (ISO/IEC 14882:1998)。这意味着没有标准支持在C++03甚至C++11下使用OpenMP。因此,任何使用C++ >98和OpenMP的程序都是超出标准范围的,这意味着即使它在某些条件下工作,也不太可能具有可移植性,而且绝对不能保证。
对于具有自身多线程支持的C++11来说,情况甚至更糟,这很可能会与某些实现中的OpenMP发生冲突。
那么,在使用C++03和C++11时,使用OpenMP安全吗?
一个程序中能否安全地同时使用C++11多线程和OpenMP,但不交错使用它们(即没有将OpenMP语句传递给使用C++11并发特性的任何代码,并且没有在OpenMP生成的线程中使用C++11并发)?
我特别关注的是首先调用使用OpenMP的一些代码,然后再调用使用C++11并发的其他代码,这些代码操作相同的数据结构。