Generell die new
-Operator ist Thread-sicher - Thread-Sicherheitsgarantien für Aufrufe in die STL und die Standardbibliothek werden jedoch vom Standard geregelt - dies bedeutet nicht, dass sie Thread-unbewusst sind - sie haben in der Regel sehr gut definierte Garantien für Thread-Sicherheit für bestimmte Operationen. Beispielsweise ist das schreibgeschützte Durchlaufen einer Liste Thread-sicher für mehrere Leser, während das Durchlaufen einer Liste und das Vornehmen von Aktualisierungen dies nicht ist. Sie müssen die Dokumentation lesen und sehen, was die verschiedenen Garantien sind, obwohl sie nicht so belastend sind und eher Sinn machen.
Während ich über Konzepte spreche, die ich nicht verwendet habe, sollte ich erwähnen, dass Sie wahrscheinlich sicherstellen möchten, dass Sie nur POD-Typen verwenden, wenn Sie Shared Memory verwenden, und Placement new verwenden.
Zweitens, wenn Sie Shared Memory verwenden, wie es allgemein auf Linux-Systemen verstanden wird, dann verwenden Sie möglicherweise mehrere Prozesse - keine Threads, um Speicher zuzuweisen und "Sachen zu erledigen" - und Shared Memory als Kommunikationsschicht zu verwenden. Wenn dies der Fall ist, dann ist die Thread-Sicherheit Ihrer Anwendung und Bibliotheken nicht wichtig – was jedoch wichtig ist, ist die Thread-Sicherheit von allem, was die Shared-Memory-Allokation verwendet! Dies ist eine andere Situation als das Ausführen eines Prozesses mit vielen Threads. In diesem Fall IST die Frage nach der Thread-Sicherheit des new-Operators ein berechtigtes Anliegen und könnte durch die Platzierung new angegangen werden, wenn dies nicht der Fall ist, oder durch die Definition Ihrer eigenen Zuweisungen.
Sie müssen sehr genau suchen, um eine Plattform zu finden, die Threads unterstützt, aber kein Thread-sicheres new
hat . Tatsächlich ist die Thread-Sicherheit von new
(und malloc
) ist einer der Gründe, warum es so langsam ist.
Wenn Sie andererseits eine Thread-sichere STL wünschen, können Sie Intel TBB in Betracht ziehen, das Thread-fähige Container hat (obwohl nicht alle Operationen auf ihnen Thread-sicher sind).