C++ 我可以在OpenMP 2.0循环中断言吗?
它似乎可以编译,但我只是想问一下,是否有其他考虑因素或原因导致它无法按预期工作:C++ 我可以在OpenMP 2.0循环中断言吗?,c++,C++,它似乎可以编译,但我只是想问一下,是否有其他考虑因素或原因导致它无法按预期工作: std::vector<int> myvec(100,1) #pragma omp parallel for schedule(static) for (int i = 0; i < (int) myvec.size(); ++i) { assert(myvec[i] == 1); } std::vector myvec(100,1) #计划的pragma omp并行(静态) 对于(int
std::vector<int> myvec(100,1)
#pragma omp parallel for schedule(static)
for (int i = 0; i < (int) myvec.size(); ++i)
{
assert(myvec[i] == 1);
}
std::vector myvec(100,1)
#计划的pragma omp并行(静态)
对于(int i=0;i<(int)myvec.size();++i)
{
断言(myvec[i]==1);
}
AFAIK,最坏的情况是您会收到一条乱码错误消息,因为它同时在多个线程上失败。如果您想确定,请预处理该文件,并查看宏在展开后的外观。通常情况下,assert
只是一个带有printf/abort
的If
语句,它们应该是线程安全的。让所有线程都遵循相同的路径通常是一个好主意。当断言失败时,尽管整个程序都会失败,所以它应该是正常的。尽管您可能希望编写一个自定义断言,其中printf
位于critical
块中(@zneak的注释)。需要注意的危险情况是if
语句中的障碍等,线程可能会无限期地等待。