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 установщик.

Другие вопросы по тегам