Unterstützt MinGW-w64 standardmäßig std::thread, wenn das Win32-Threading-Modell verwendet wird?

Lesezeit: 3 Minuten

Unterstutzt MinGW w64 standardmasig stdthread wenn das Win32 Threading Modell verwendet wird
März 2377

Ich habe mich bei der Installation der MinGW-w64-Toolchain für das Win32-Threading-Modell entschieden, nachdem ich gelesen habe, dass es eine bessere Leistung als das POSIX-Pendant bietet. Ich bin nicht qualifiziert, diesen Anspruch selbst zu bewerten, aber hier ist eine Quelle dafür.

Zuerst dachte ich, diese Option würde sich nur auf das Innenleben der GCC-Laufzeit auswirken, ohne mich daran zu hindern, C++ 11-Threads in meinem Code zu verwenden, basierend auf dieser Antwort und diesem Kommentar eines anderen Benutzers rubenvb.
Dies scheint jedoch nicht der Fall zu sein. std::thread Unterstützung scheint in dieser MinGW-w64-Installation nicht vorhanden zu sein.

Ich beschwöre g++ von der Befehlszeile ohne andere Optionen als -std=c++11.

An dieser Stelle bin ich mir nicht sicher, ob:

  • rubenvb war ein Fehler, und es ist tatsächlich notwendig, MinGW-w64 unter dem POSIX-Threading-Modell zu installieren, um meinen Code zu kompilieren, der von C++11 abhängt thread Bibliothek, oder;
  • Ich habe das alles völlig falsch verstanden, oder;
  • std::thread wird in meinem Szenario tatsächlich unterstützt, es ist nur nicht intuitiv.

Ich betone den „out of the box“-Teil im Titel. Es existiert eine Bibliothek namens mingw-std-threads, wie in dieser Antwort dargestellt. Als Option eines Drittanbieters ist es jedoch für diese Frage nicht relevant.

Ab heute (Mai 2016) unterstützt MinGW-w64 also nativ std::thread je nach Code, wenn mit dem internen Win32-Threading-Modell installiert?

  • Die Installation von mingw-std-threads, wie Sie sie verlinkt haben, funktioniert und dauert etwa 30 Sekunden

    – MM

    21. Mai 2016 um 4:33 Uhr

  • @MM … Danke für den Vorschlag, das habe ich schon gemacht. Diese Frage dient jedoch hauptsächlich der Neugier / Kanonizität. Informationen scheinen zwischen verschiedenen Quellen zu divergieren.

    – März 2377

    21. Mai 2016 um 4:39 Uhr


  • Weder meine Antwort noch mein Kommentar sind falsch. Sie wurden zu einer Zeit geschrieben, als die mingw-std-threads-Bibliothek nicht verfügbar war (oder zumindest war ich mir dessen nicht bewusst). GCC mit seinem auf win32 eingestellten internen Threading-Modell unterstützt keine C++11-Threading-Funktionalität, Punkt. Meine Antwort, die Sie verlinkt haben, sagt genau das. Mein Kommentar hingegen spricht nicht über die Unterstützung von C++ 11-Threads. Stattdessen befasst es sich mit dem Aufruf von pthreads oder win32-threadbezogenen Funktionen mit GCC, das mit win32/posix als internem Threading-Modell erstellt wurde, was alles so funktioniert, wie man es erwarten würde. Das sind zwei sehr unterschiedliche Themen.

    – rubenvb

    5. Juni 2016 um 0:15 Uhr

  • Hallo @rubenvb, danke für deinen Beitrag. Dann scheint Punkt 2 – “Ich habe das alles völlig falsch verstanden” – der Fall zu sein. Ich habe nicht richtig darauf geachtet, dass Sie sich auf den Begriff “API” beziehen.

    – März 2377

    13. Juli 2016 um 6:37 Uhr

Unterstutzt MinGW w64 standardmasig stdthread wenn das Win32 Threading Modell verwendet wird
MM

Um MinGW-w64 mit nativen Win32-Threads zu verwenden, können Sie die mingw-std-threads Kopfzeilen.

Wie auf dieser Seite beschrieben, liegt dies daran, dass MinGW-w64 eine Portierung von GCC ist, GCC jedoch keine native Thread-Unterstützung enthält. Stattdessen implementieren GCC-Installationen normalerweise Threading entweder über gthreads oder pthreads als Teil von glibc. MinGW-w64 enthält keine Portierung von glibc. (Stattdessen verwendet es eine Kombination aus der MSVC-Laufzeit und seinem eigenen Code, um Lücken zu füllen).

Wie ebenfalls auf dieser Seite beschrieben, enthalten neuere Versionen von MinGW-w64 einen Win32-Port von pthreads (“winpthreads”), was erklärt, warum Sie Threads “out of the box” funktionieren lassen können, indem Sie das “pthread”-Modell aus dem MinGW auswählen -w64-Installationsprogramm.

914600cookie-checkUnterstützt MinGW-w64 standardmäßig std::thread, wenn das Win32-Threading-Modell verwendet wird?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy