For loop OPENMP中for循环的输出错误

For loop OPENMP中for循环的输出错误,for-loop,openmp,For Loop,Openmp,你好,我是OpenMp中的新手,对简单for循环有问题。这是我的代码: #include "stdafx.h" #include <Windows.h> #include <omp.h> char str[20]; INT64 i; int main() { HANDLE hAppend; DWORD dwBytesToWrite ,dwPos; DWORD dwBytesWritten = 0; hA

你好,我是OpenMp中的新手,对简单for循环有问题。这是我的代码:

   #include "stdafx.h"
   #include <Windows.h>
   #include <omp.h>

   char str[20];
   INT64 i;

   int main()
   {
   HANDLE hAppend;
   DWORD dwBytesToWrite ,dwPos;
   DWORD dwBytesWritten = 0;
   hAppend = CreateFile(L"log.txt" , 
   GENERIC_WRITE, 
   0, // do not share
   NULL, 
   OPEN_ALWAYS, 
   FILE_ATTRIBUTE_NORMAL,
   NULL); 

   #pragma omp parallel num_threads(4) private(i)
   {
    #pragma omp for ordered 
    for( i=0; i<=MAXINT64;i++)
    {     

sprintf(str,"%x | %x \r\n",i);
    dwPos = SetFilePointer(hAppend, 0, NULL, FILE_END);

    LockFile(hAppend, dwPos, 0, strlen(str), 0);
    WriteFile(
          hAppend,
          str,
          strlen(str),
          &dwBytesWritten,
          NULL 

             );
      }
     }
    }
没有打开的mp,一切都正常,但有并行性吗 输出出错。OpenMp?或我的代码有什么问题?

既然您在for构造中使用了“ordered”子句,您是否尝试以有序方式运行部分并行“for”循环

如果在“for”构造上使用“ordered”来序列化循环的各个部分(对文件的访问?),那么还需要在循环体中使用“ordered”构造来告诉编译器必须按顺序执行并行循环的哪个部分:

#pragma omp parallel for ordered
for(...) {
  // something that runs parallel
  do_parallel();
  // serialize
#pragma omp ordered
  {
     do_ordered();
  }
}

使用openmp和锁定/写入文件以及未在for循环中声明str private可能会出现问题
#pragma omp parallel for ordered
for(...) {
  // something that runs parallel
  do_parallel();
  // serialize
#pragma omp ordered
  {
     do_ordered();
  }
}