MinGW-w64 поддерживает std::thread из коробки при использовании модели потоков Win32?
Я выбрал модель потоков Win32 при установке цепочки инструментов MinGW-w64, прочитав, что она обеспечивает лучшую производительность, чем аналог POSIX. Я не обладаю достаточной квалификацией для сравнительного анализа этого требования, но вот источник для него.
Сначала я думал, что эта опция повлияет только на внутреннюю работу среды выполнения GCC, но не помешает мне использовать потоки C++11 в моем коде, основываясь на этом ответе и этом комментарии другого пользователя rubenvb.
Тем не менее, это не так. std::thread
поддержка в этой установке MinGW-w64 отсутствует.
Я вызываю g++ из командной строки без каких-либо опций, кроме -std=c++11
,
На данный момент я не уверен, что:
- rubenvb был не прав, и на самом деле необходимо установить MinGW-w64 в соответствии с моделью потоков POSIX, чтобы скомпилировать мой код, который зависит от C++11
thread
библиотека или; - Я все неправильно понял, или;
std::thread
на самом деле поддерживается в моем сценарии, это просто не интуитивно понятно.
Я подчеркиваю часть "из коробки" в названии. Существует библиотека под названием mingw-std-threads, как представлено в этом ответе. Однако, как сторонний вариант, он не имеет отношения к этому вопросу.
Итак, на сегодняшний день (май 2016 года) MinGW-w64 изначально поддерживает std::thread
в зависимости от кода, при установке с моделью внутренней потоковой Win32?
1 ответ
Чтобы использовать MinGW-w64 с собственными потоками Win32, вы можете установить заголовки mingw-std-threads.
Как описано на этой странице, это связано с тем, что MinGW-w64 является портом GCC, но GCC не включает поддержку собственных потоков. Вместо этого установки GCC обычно реализуют потоки через gthreads или pthreads как часть glibc. MinGW-w64 не включает в себя порт glibc. (Вместо этого он использует комбинацию среды выполнения MSVC плюс собственный код для заполнения дыр).
Также, как описано на этой странице, последние версии MinGW-w64 включают в себя порт pthreads ("winpthreads") Win32, который объясняет, почему вы можете заставить потоки работать "из коробки", выбрав модель "pthread" из MinGW -w64 установщик.