C++ 禁用GCC自动并行化

C++ 禁用GCC自动并行化,c++,c++11,C++,C++11,我正在运行MinGW G++4.8.1,当我更改以下代码时: for (Room &r : TempRooms2) { r.vNeighbours.clear(); } 到 该程序以前运行正常,但在libwinpthread-1.dll中出现segfault时崩溃。现在,我以前没有使用过这个G++4.8.1版本的线程功能,测试后发现它们在我的操作系统上不稳定,因此我需要在将来使用线程时更改为其他版本。在那之前,我有没有办法告诉G++停止尝试并行化循环 *编辑:抱歉,原来

我正在运行MinGW G++4.8.1,当我更改以下代码时:

for (Room &r : TempRooms2) {  
    r.vNeighbours.clear();  
}

该程序以前运行正常,但在libwinpthread-1.dll中出现segfault时崩溃。现在,我以前没有使用过这个G++4.8.1版本的线程功能,测试后发现它们在我的操作系统上不稳定,因此我需要在将来使用线程时更改为其他版本。在那之前,我有没有办法告诉G++停止尝试并行化循环


*编辑:抱歉,原来崩溃是由于代码进入了其他地方的无限循环。我只是假设这是一个线程问题,因为GDP说调用“pthread_tls_init”是分段错误,我认为只有线程程序才会使用它。如果有人能解释为什么Windows由于无限循环而终止程序在调试器看来是pthread中的segfault,我将不胜感激。*

GCC不启用自动并行化,除非您使用例如-ftree parallelize循环请求它


因此,如果您没有使用它,那么问题不是由于自动并行。

是什么让您认为您的循环正在多线程中运行?pthread中的segfault不是这方面的证据。与此无关,分段错误不能通过更改编译器或编译器选项来处理,除非您确定它不仅仅是您的代码,或者您明确使用了实验性功能。这可能是因为bug只是通过一个特定的标志或编译器暴露出来的,在这种情况下,你应该感谢segfault…@film,或者当我用c++11线程代码测试它时,编译器似乎失败了。例如,下面的例子在libwinpthread中由于segfault而崩溃,我非常确定代码是正确的。TestReturn是一个只返回1的简单函数。自动f1=asynclaunch::async,TestReturn;int res=f1.get;因此,对于使用本机windows线程的构建,更改编译器似乎是唯一的选择。谢谢。我只是看到了pthread,盲目地认为它意味着线程。
for (Room &r : TempRooms2) {
    r.vNeighbours.clear();  
    r.Layer=-1;  
}