Поддержка потока MinGW 4.8.1 С++ 11

Я загрузил версию MinGW с официального сайта: http://sourceforge.net/projects/mingw/files/ и установил ее на своей машине с Windows 7.

Запуск g++ --version дает мне g++.exe (GCC) 4.8.1, и я считаю, что GCC 4.8.1 поддерживает функции С++ 11, включая потоки.

Запуск g++ -std=c++11 main.cpp успешно компилирует следующую программу.

//main.cpp
#include <memory>

int main() {
    std::unique_ptr<int> a(new int);
    return 0;
}

Но запустите g++ -std=c++11 main.cpp в следующей программе:

//main.cpp
#include <mutex>

int main() {
    std::mutex myMutex;
    return 0;
}

дает ошибки:

main.cpp: In function `int main()`:
main.cpp:5:5: error: 'mutex' is not a member of 'std'
    std::mutex myMutex;
    ^
main.cpp:5:16: error: expected ';' before 'myMutex'
    std::mutex myMutex;
                ^

как будто <mutex> не поддерживается. Компилятор не жалуется на #include <mutex>, поэтому я понятия не имею, почему я получаю эту ошибку.

Ответы

Ответ 1

Если я хорошо понимаю, std threading по-прежнему не поддерживается в mingw, но некоторые сборки mingw-w64 поддерживают его. К счастью, вы все равно можете создавать 32-разрядные приложения, используя эту версию mingw.

Вот ссылка для сборки.

Ответ 2

Уже существует встроенная реализация win32 примитивов std:: thread и sync: https://github.com/meganz/mingw-std-threads Это библиотека только для заголовков и должна работать с любой версией MinGW, совместимой с С++ 11.