Does MinGW-w64 support std::thread out of the box when using the Win32 threading model?

20,271

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.

Share:
20,271
Marc.2377
Author by

Marc.2377

Marc ".2377" Ranolfi - Cross-platform developer and open source hacker; aspiring engineer. Contributor to codidact.org, currently on a hiatus. (Also on Discord.)

Updated on November 30, 2020

Comments

  • Marc.2377
    Marc.2377 over 3 years

    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?