G++ ist der C++ 11 thread-Modell mit pthreads in den hintergrund?
Ich versuche nur, meine Hände auf g++ 4.6
und C++11
Funktionen.
Jedes mal, wenn ich kompilieren eine einfache threading-code mit -std=c++0x
Flagge, entweder es stürzt mit einem segmentation fault oder es nur wirft einige seltsame Ausnahme.
Ich habe einige Fragen zu C++11
threads und ich merkte, dass ich auch verwenden müssen -pthread
flag kompilieren Sie den code, richtig. Mit -pthread
geklappt, und ich war in der Lage zu führen Sie die Gewinde-Codes.
Meine Frage ist, ob die C++11
multi-threading-Modell verwendet Pthreads
im hintergrund?
Oder ist es geschrieben aus dem Grund?
Ich weiß nicht, ob einer der Mitglieder gcc
Mitwirkende, aber ich bin einfach nur neugierig.
- wie es aussieht, die Frage ist, über g++ 4.6.
- Die "seltsame Ausnahme" ist wohl
std::system_error
, die von der Norm geforderten, wenn die threads nicht erstellt werden kann (z.B. weil Sie noch nicht verlinkt libpthread.also mit-pthread
). Ich arbeite an der Verbesserung der Meldung, dass die Ausnahme gibt, finden Sie unter gcc.gnu.org/PR52681 - dies ist die Ausnahme, ich bin den Umgang mit, die auf meinem Linux-Rechner...mit AMD Turion X2....Während es lief reibungslos, ohne
-pthread
Flagge auf meine Mitbewohner Intel-Rechner...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie
g++ -v
es wird Ihnen eine Reihe von Informationen darüber, wie es konfiguriert wurde. Eines dieser Dinge, wird in der Regel eine Zeile, die so aussieht wiewas bedeutet, dass es konfiguriert wurde, verwenden pthreads für seine threading-Bibliothek (std::thread in libstdc++), und das bedeutet, Sie braucht es auch keine Fahnen, die erforderlich sein könnten für pthreads auf Ihrem system (
-pthread
auf Linux).Das hat nichts bestimmtes zu tun mit dem standard, es ist nur ein detail, wie der standard umgesetzt wird von g++
C++ nicht angeben, wie threads implementiert werden. In der Praxis C++ - threads in der Regel ausgeführt als dünner Wrapper über bereits bestehende system-thread-Bibliotheken (wie pthreads oder windows-threads). Es gibt sogar eine Regelung zum Zugriff auf die zugrunde liegenden thread-Objekt mit std::thread::native_handle().
Dem Grund, dass es abstürzt ist, dass, wenn Sie nicht angeben
-pthreads
oder-lpthreads
eine Anzahl von schwach definiert pthreads-stub-Funktionen vonlibc
verbunden sind. Diese stub-Funktionen sind genug, um Ihr Programm zu verknüpfen, ohne Fehler. Allerdings, tatsächlich die Schaffung eines pthread-erfordert stets die volle auf libpthread.eine Bibliothek, und wenn der dynamische linker (dl
) versucht zu beheben, die fehlenden Funktionen, erhalten Sie einen Speicherzugriffsfehler.