使用 MinGW 的 C++ 多线程

Posted

技术标签:

【中文标题】使用 MinGW 的 C++ 多线程【英文标题】:C++ Multithreading with MinGW 【发布时间】:2021-08-09 06:31:27 【问题描述】:

我想用 c++ 试验多线程。我在 Windows 10 上使用 MinGW g++ 编译器(版本 8.2.0)。当我尝试使用直接从网站获得的代码将内置线程库与 c++ 一起使用时,出现错误:

main.cpp:34:5: 错误: 'thread' 未在此范围内声明 线程 th1(foo, 3); ^~~~~~ main.cpp:34:5: 注意:'std::thread' 定义在头文件'';你忘了'#include'吗? main.cpp:5:1: +#include 使用命名空间标准; main.cpp:34:5: 线程 th1(foo, 3); ^~~~~~ main.cpp:38:11: 错误: 预期';'在'th2'之前 线程 th2(thread_obj(), 3); ^~~~ ; main.cpp:49:11: 错误:预期 ';'在'th3'之前 线程 th3(f, 3); ^~~~ ; main.cpp:53:5:错误:未在此范围内声明“th1” th1.join(); ^~~ main.cpp:56:5: 错误: 'th2' 未在此范围内声明 th2.join(); ^~~ main.cpp:59:5: 错误: 'th3' 未在此范围内声明 th3.join(); ^~~

这是我的编译器特有的问题,还是 MinGW 根本不允许标准线程库?如果没有,有什么好的库可以替代?

【问题讨论】:

我确实添加了#include 它仍然失败,同样的错误。 【参考方案1】:

您可以:

installing mingw-w64 时选择“pthreads”选项,或 安装mingw-w64时选择“Win32线程”选项,并安装额外的头文件包。

另一个不错的选择是install via MSYS2,它始终为您提供具有合适配置的最新版本。 (在这种情况下为 pthreads)。

如果您不打算通过 MSYS2,请参阅 this thread 了解更多信息。

【讨论】:

【参考方案2】:

下载mingw时,有win32版本和POSIX版本。获取 POSIX,它将与 std::thread 实现一起提供。

【讨论】:

以上是关于使用 MinGW 的 C++ 多线程的主要内容,如果未能解决你的问题,请参考以下文章

C++多线程怎么实现

如果 ANSI C++ 不支持多线程,非托管 C++ 应用程序如何实现多线程?

c++多线程问题

c++ 多线程与c多线程有啥区别?

C++多线程

在C++中使用openmp进行多线程编程