mingw-w64 gcc std::thread 行为异常

Posted patt

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mingw-w64 gcc std::thread 行为异常相关的知识,希望对你有一定的参考价值。

我用的 ming-w64 gcc 是通过 MSYS2 安装的,包名是 mingw-w64-x86_64-gcc,版本 9.2.0-2。

我发现 std::thread 行为异常。

int main() {
  auto f = [](int i) {
    cout << "i: " << i << endl;
    std::this_thread::sleep_for(std::chrono::milliseconds(1000));
  };
  vector<thread> threads;
  for (int i = 0; i < 3; ++i) {
    threads.emplace_back(thread(f, i));
  }
  for (auto &t : threads) {
    t.join();
  }
  cout << "size: " << threads.size() << endl;
  return 0;
}

可能会输出

i: 0
i: 2
i: 1
i: 2
size: 3

同样的代码,将 toolchain 换成 Visual Studio,编译生成的可执行文件就是正常的。

以上是关于mingw-w64 gcc std::thread 行为异常的主要内容,如果未能解决你的问题,请参考以下文章

传递指向成员函数的指针在 MinGW-w64 中编译,但不在 gcc 中

mingw-w64线程模型:posix vs win32(posix允许使用c++11的std:: thread,但要带一个winpthreads,可能需要额外dll)

GCC (MingW-w64) 找不到基础构造函数 (!?)

我在哪里可以找到 `mingw64/mingw-w64-x86_64-gcc-libs` 8.2.0-3 的源代码包?

将 Cilk Plus 与 MinGW-w64 (gcc 4.9.2) 一起使用?

mingw-w64和Linux下的GCC有区别吗