Does MinGW-w64 support std::thread out of the box when using the Win32 threading model?
I have opted for the Win32 threading model when installing the MinGW-w64 toolchain, after reading that it provides better performance than the POSIX counterpart. I am not qualified for benchmarking this claim myself, but here's a source for it.
At first I thought this option would only affect the inner workings of the GCC runtime, while not preventing me from using C++11 threads in my code, based on this answer and this comment by fellow user rubenvb.
However, this doesn't seem to be the case. std::thread
support appears to be non-existent in this MinGW-w64 installation.
I am invoking g++ from the command line with no options other than -std=c++11
.
At this point I'm not sure if:
-
rubenvb was mistaken, and it's actually necessary to install MinGW-w64 under the POSIX threading model in order to compile my code which depends on the C++11
thread
library, or; - I completely misunderstood it all, or;
-
std::thread
is actually supported in my scenario, it's just not intuitive.
I reinforce the "out of the box" part in the title. There exists a library called mingw-std-threads, as presented in this answer. However, as a third-party option, it is not relevant to this question.
So, as of today (May 2016), does MinGW-w64 nativelly support std::thread
depending code, when installed with the Win32 internal threading model?
Solution 1:
To use the MinGW-w64 with Win32 native threads you can install the mingw-std-threads headers.
As described on that page, this is because MinGW-w64 is a port of GCC, but GCC does not include any native thread support. Instead GCC installations typically implement threading via either gthreads or pthreads as a part of glibc. MinGW-w64 does not include a port of glibc. (Instead it uses a combination of the MSVC runtime, plus its own code to fill in holes).
Also as described on that page, recent versions of MinGW-w64 do include a Win32 port of pthreads ("winpthreads"), which explains why you can have threads work "out of the box" by selecting the "pthread" model from the MinGW-w64 installer.