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

Ist der Zugriff auf den Heap serialisiert?

new und delete sind threadsicher

Die folgenden Funktionen müssen Thread-sicher sein:

  • Die Bibliotheksversionen von operator new und operator delete
  • Benutzerersatzversionen des globalen operator new und operator delete
  • std::calloc , std::malloc , std::realloc , std::aligned_alloc , std::free

Aufrufe an diese Funktionen, die eine bestimmte Speichereinheit zuordnen oder freigeben, erfolgen in einer einzigen Gesamtreihenfolge, und jeder dieser Zuordnungsaufrufe erfolgt vor der nächsten Zuordnung (falls vorhanden) in dieser Reihenfolge.

Mit gcc, new wird durch Delegierung an malloc implementiert , und wir sehen, dass ihr malloc verwendet tatsächlich eine Sperre. Wenn Sie befürchten, dass Ihre Zuordnung Engpässe verursacht, schreiben Sie Ihren eigenen Allocator.


Die Antwort ist ja, aber in der Praxis ist es normalerweise kein Problem. Wenn es ein Problem für Sie ist, können Sie versuchen, Ihre Implementierung von malloc durch tcmalloc zu ersetzen, das mögliche Konflikte reduziert, aber nicht beseitigt (da es nur einen Heap gibt, der von Threads und Prozessen gemeinsam genutzt werden muss). P>

TCMalloc weist jedem Thread einen Thread-lokalen Cache zu. Kleine Zuordnungen werden aus dem Thread-Local-Cache befriedigt. Objekte werden nach Bedarf von zentralen Datenstrukturen in einen Thread-lokalen Cache verschoben, und regelmäßige Speicherbereinigungen werden verwendet, um Speicher aus einem Thread-lokalen Cache zurück in die zentralen Datenstrukturen zu migrieren.

Es gibt auch andere Optionen wie die Verwendung benutzerdefinierter Allokatoren und/oder spezialisierter Container und/oder die Neugestaltung Ihrer Anwendung.


Linux
  1. Sind die Berechtigungen des übergeordneten Verzeichnisses beim Zugriff auf ein Unterverzeichnis von Bedeutung?

  2. Der richtige Weg, um auf eine bestimmte Hilfedatei in Vim zuzugreifen?

  3. So implementieren Sie readlink, um den Pfad zu finden

  4. Wenn der Heap aus Sicherheitsgründen mit null initialisiert ist, warum wird der Stack dann nur nicht initialisiert?

  5. Starten Sie SSH auf einem Computer neu, auf dem SSH der einzige Zugriffsmodus ist

So beschränken Sie den Zugriff auf die ONLYOFFICE-Editoren auf die Benutzer Ihrer Nextcloud-Instanz

So beschränken Sie den Zugriff des Benutzers auf das Linux-System

Ssh-Portweiterleitung, um von überall auf den Heimcomputer zuzugreifen?

Zugriff auf die Rohzugriffsprotokolle in cPanel

Der SSH-Zugriff für einen neuen Benutzer kann nicht abgerufen werden

Wie greife ich auf das angehängte Volume in Amazon EC2 zu