web-dev-qa-db-fra.com

Est-ce que MinGW-w64 prend en charge std :: thread hors de la boîte lors de l'utilisation du modèle de thread Win32?

J'ai opté pour le modèle de filetage Win32 lors de l'installation de la chaîne d'outils MinGW-w64, après avoir lu qu'il offre de meilleures performances que l'homologue POSIX. Je ne suis pas qualifié pour comparer cette affirmation moi-même, mais voici une source pour cela .

Au début, je pensais que cette option n'affecterait que le fonctionnement interne du runtime GCC, sans m'empêcher d'utiliser des threads C++ 11 dans mon code, basé sur cette réponse et ce commentaire par un autre utilisateur rubenvb .
Cependant, cela ne semble pas être le cas. std::thread la prise en charge semble inexistante dans cette installation MinGW-w64.

J'invoque g ++ à partir de la ligne de commande sans options autres que -std=c++11.

À ce stade, je ne sais pas si:

  • rubenvb était faux, et il est en fait nécessaire d'installer MinGW-w64 sous le modèle de thread POSIX afin de compiler mon code qui dépend du C++ 11 thread bibliothèque, ou;
  • J'ai complètement mal compris tout cela, ou;
  • std::thread est réellement pris en charge dans mon scénario, ce n'est tout simplement pas intuitif.

Je renforce la partie "out of the box" dans le titre. Il existe une bibliothèque appelée mingw-std-threads , comme présenté dans cette réponse . Cependant, en tant qu'option tierce, elle n'est pas pertinente pour cette question.

Donc, à partir d'aujourd'hui (mai 2016), MinGW-w64 prend-il en charge nativement std::thread selon le code, lorsqu'il est installé avec le modèle de filetage interne Win32?

21
Marc.2377

Pour utiliser le MinGW-w64 avec des threads natifs Win32, vous pouvez installer les en-têtes mingw-std-threads .

Comme décrit sur cette page, cela est dû au fait que MinGW-w64 est un port de GCC, mais GCC n'inclut aucun support de thread natif. Au lieu de cela, les installations GCC implémentent généralement le filetage via gthreads ou pthreads dans le cadre de la glibc. MinGW-w64 n'inclut pas de port de glibc. (Au lieu de cela, il utilise une combinaison du runtime MSVC, plus son propre code pour remplir les trous).

Également comme décrit sur cette page, les versions récentes de MinGW-w64 incluent un port Win32 de pthreads ("winpthreads"), ce qui explique pourquoi vous pouvez faire fonctionner les threads "prêts à l'emploi" en sélectionnant le modèle "pthread" dans MinGW -w64 installateur.

19
M.M