GNU/Linux >> Znalost Linux >  >> Linux

Je přístup k haldě serializován?

new a delete jsou vlákno bezpečné

Aby byly vlákno bezpečné, jsou vyžadovány následující funkce:

  • Verze knihovny operator new a operator delete
  • Uživatelské verze globálního operator new a operator delete
  • std::calloc , std::malloc , std::realloc , std::aligned_alloc , std::free

Volání těchto funkcí, které alokují nebo dealokují konkrétní jednotku úložiště, probíhají v jediné celkové objednávce a každé takové volání dealokace se děje – před další alokací (pokud existuje) v tomto pořadí.

S gcc, new se implementuje delegováním na malloc , a vidíme, že jejich malloc skutečně používá zámek. Pokud se obáváte, že vaše alokace způsobí úzká místa, napište si vlastní alokátor.


Odpověď je ano, ale v praxi je to obvykle není problém. Pokud je to pro vás problém, můžete zkusit nahradit svou implementaci malloc za tcmalloc, který omezí, ale neodstraní možné spory (protože existuje pouze 1 halda, kterou je třeba sdílet mezi vlákny a procesy).

TCMalloc přiřadí každému vláknu lokální mezipaměť vlákna. Malé alokace jsou uspokojeny z místní mezipaměti podprocesu. Objekty se podle potřeby přesouvají z centrálních datových struktur do lokální mezipaměti vláken a k migraci paměti zpět z lokální mezipaměti vláken do centrálních datových struktur se používají pravidelné sběry odpadků.

Existují také další možnosti, jako je použití vlastních alokátorů a/nebo specializovaných kontejnerů a/nebo přepracování vaší aplikace.


Linux
  1. Vidíte dostupné bezdrátové přístupové body v terminálu?

  2. Restartujte SSH na počítači, kde je SSH jediným způsobem přístupu

  3. Nelze získat přístup SSH pro nového uživatele

  1. Jsou při přístupu k podadresáři důležitá oprávnění nadřazeného adresáře?

  2. Jak získat přístup k historii za chodu v Unixu?

  3. Jak se dostanu k ovládacímu panelu?

  1. Správný způsob, jak získat přístup ke konkrétnímu souboru nápovědy ve Vimu?

  2. Proč odstranění Iptables „narušilo“ síťový přístup?

  3. Jak získat přístup k poslednímu argumentu komentovaného příkazu?