GNU/Linux >> LINUX-Kenntnisse >  >> Linux

C++ neue Operator-Thread-Sicherheit in Linux und gcc 4

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).


Linux
  1. 7 Beispiele für Linux-Operatoren Grep OR, Grep AND, Grep NOT

  2. Wie benenne ich einen Thread in Linux?

  3. Senden und Empfangen einer Datei in der Socket-Programmierung unter Linux mit C/C++ (GCC/G++)

  4. Makros für GCC/G++ zur Unterscheidung von Linux und Mac OSX?

  5. WaitForSingleObject und WaitForMultipleObjects äquivalent in Linux?

Linux Mint 19.2 „Tina“ veröffentlicht:Hier ist, was neu ist und wie man es bekommt

Linux Kernel 5.9:Was ist neu und wie man aktualisiert

So kompilieren Sie C, C++ und Java mit Terminal unter Linux

So kompilieren und führen Sie C- und C++-Programme unter Linux aus

So erstellen und verwalten Sie neue Benutzer unter Linux

So installieren und verwenden Sie den GCC-Compiler auf einem Linux-System