Поддерживает ли MinGW-w64 std:: thread из коробки при использовании модели потоковой обработки Win32?

Я выбрал модель Threading Win32 при установке инструментальной метки MinGW-w64, прочитав, что она обеспечивает лучшую производительность, чем аналоги POSIX. Я не квалифицирован для тестирования этого требования самостоятельно, но здесь источник для него.

Сначала я думал, что этот параметр повлияет только на внутреннюю работу среды выполнения GCC, не мешая мне использовать потоки С++ 11 в моем коде на основе этого ответа и этот комментарий от пользователя rubenvb.
Однако, похоже, это не так. В этой установке MinGW-w64 отсутствует поддержка std::thread.

Я вызываю g++ из командной строки без параметров, отличных от -std=c++11.

В этот момент я не уверен, что:

  • rubenvb был неправильным, и на самом деле необходимо установить MinGW-w64 под моделью потоковой POSIX, чтобы скомпилировать мой код, который зависит от библиотеки С++ 11 thread, или;
  • Я полностью не понял все это; или
  • std::thread фактически поддерживается в моем сценарии, он просто не интуитивно понятен.

Я подчеркиваю часть "из коробки" в названии. Существует библиотека под названием mingw-std-threads, как представлено в этом ответе. Однако в качестве стороннего варианта это не имеет отношения к этому вопросу.

Итак, на сегодняшний день (май 2016 г.), поддерживает ли MinGW-w64 nativelly std::thread в зависимости от кода, когда он установлен с внутренней версией Win32?

Ответ 1

Чтобы использовать MinGW-w64 с родными потоками Win32, вы также должны установить заголовки mingw-std-threads.

Как описано на этой странице, это связано с тем, что MinGW-w64 является портом GCC, но GCC не включает поддержку встроенного потока. Вместо этого установки GCC обычно реализуют потоки через gthreads или pthreads как часть glibc. MinGW-w64 не включает порт glibc. (Вместо этого он использует комбинацию времени выполнения MSVC, а также свой собственный код для заполнения отверстий).

Также, как описано на этой странице, последние версии MinGW-w64 включают в себя порт pythreads Win32, который объясняет, почему вы можете использовать потоки "из коробки", выбирая модель "pthread" из MinGW-w64 установщик.