Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我可以在OpenMP 2.0循环中断言吗?_C++ - Fatal编程技术网

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
语句中的障碍等,线程可能会无限期地等待。