OpenMP hat eine eigene Unterstützung für atomaren Zugriff, jedoch gibt es mindestens zwei Gründe, C++ 11 Atomics vorzuziehen: Sie sind wesentlich flexibler und sie sind Teil des Standards. Auf der anderen Seite ist OpenMP leistungsfähiger als die C++ 11-Thread-Bibliothek.Mischen von C++ 11 Atomics und OpenMP
Der Standard spezifiziert die atomare Operationen Bibliothek und die Fadenauflage Bibliothek in zwei verschiedenen Kapiteln. Dies lässt mich glauben, dass die Komponenten für den atomaren Zugriff eine Art orthogonal zur verwendeten Thread-Bibliothek sind. Kann ich tatsächlich C++ 11 Atomics und OpenMP kombinieren?
gibt es eine sehr similar question auf Stack-Überlauf; es ist jedoch seit drei Jahren grundsätzlich unbeantwortet, da seine Antwort die eigentliche Frage nicht beantwortet.
Warum können Sie nicht? Versuchen Sie nicht, einen C++ - Mutex zu erstellen und warten Sie mit OpenMP darauf. –
@brianbeuning Nun, ich bin unsicher, deshalb frage ich. Es gibt einen Kommentar zu der verbundenen Frage, die spekuliert, dass wir "wahrscheinlich auf Probleme stoßen werden".Ich konnte keine feste Antwort auf die Frage im Internet finden, deshalb habe ich die Frage erneut aufgeworfen. – user1494080
Dies ist ein implementierungsdefiniertes Verhalten und kann zwischen Compilern variieren. Es gibt jedoch auch eine eher "praktische" Antwort. Wenn die Standardbibliothek und die OpenMP-Laufzeit in den meisten Fällen vom selben Compiler-Hersteller stammen, ist es höchstwahrscheinlich in Ordnung. Wenn Sie beispielsweise GCC mit libstdC++ und libgomp verwenden, können Sie mit der Laufzeit von libC++ und LLVM (Intel) klarkommen. Es kann Probleme geben, wenn ein Compiler verwendet wird, der keine eigene Standardbibliothek besitzt, zum Beispiel Intel C++ mit libstdC++ unter Linux oder libC++ unter macOS. Ich habe Probleme in diesem Fall gesehen, aber sehr selten. –