根据堆栈溢出的建议,我安装了mingw32 pthread包:
但我仍然无法使用C ++ 11多线程编译代码:
error: 'mutex' in namespace 'std' does not name a type
我使用makefile,我使用mingw32-make执行,并使用位于g++
的{{1}}。
G ++版本:C:\MinGW\bin\g++.exe
Mingw32制作版本:g++.exe (GCC) 5.3.0
,GNU Make 3.82.90
我使用Built for i686-pc-mingw32
选项生成已使用标题的列表,这就是我所拥有的:
-M
我甚至不确定这些是否是正确的标题。
可能有什么不对?我该如何解决这个问题?
答案 0 :(得分:2)
GCC for Windows附带两个线程模型:win32和posix。只有posix线程模型支持标准的多线程库。
要检查,请尝试运行g++ -v
。如果您没有看到--enable-thread=posix
,则表示您的编译器套件不支持标准多线程库。
您可以从https://sourceforge.net/projects/mingw-w64/下载Mingw64 GCC,它们是使用--enable-thread=posix
构建的。
请注意,即使--enable-thread=posix
表示您可以使用标准多线程库,但实现要比直接使用Win32 API(如CreateThread
)慢得多。这是因为对于GCC,std::thread
等在gthread
之上实现,gthread
基于pthread
实现。由于Windows不支持pthread
,因此Mingw64团队使用Win32 API实现pthread
。你可以看到你需要付出相当多的抽象债务。
如果性能对您很重要,您可能不想使用它。您还需要将winpthread.dll
分发给最终用户,因为静态链接无法正常工作。
如果您希望您的代码在所有平台上运行,可以使用它。