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 行为异常的主要内容,如果未能解决你的问题,请参考以下文章