GNU/Linux >> Linux Esercitazione >  >> Linux

L'accesso all'heap è serializzato?

new e delete sono thread-safe

Le seguenti funzioni devono essere thread-safe:

  • Le versioni della libreria di operator new e operator delete
  • Versioni di sostituzione dell'utente di operator new globale e operator delete
  • std::calloc , std::malloc , std::realloc , std::aligned_alloc , std::free

Le chiamate a queste funzioni che allocano o deallocano una particolare unità di archiviazione si verificano in un unico ordine totale e ciascuna di queste chiamate di deallocazione avviene prima della successiva allocazione (se presente) in questo ordine.

Con gcc, new è implementato delegando a malloc , e vediamo che il loro malloc usa davvero un lucchetto. Se sei preoccupato che la tua allocazione causi colli di bottiglia, scrivi il tuo allocatore.


La risposta è sì, ma in pratica è di solito non è un problema. Se è un problema per te puoi provare a sostituire la tua implementazione di malloc con tcmalloc che riduce, ma non elimina la possibile contesa (poiché c'è solo 1 heap che deve essere condiviso tra thread e processi).

TCMalloc assegna a ogni thread una cache thread-local. Piccole allocazioni vengono soddisfatte dalla cache locale del thread. Gli oggetti vengono spostati dalle strutture di dati centrali in una cache locale del thread secondo necessità e vengono utilizzate raccolte di rifiuti periodiche per migrare la memoria da una cache locale del thread alle strutture di dati centrali.

Esistono anche altre opzioni come l'utilizzo di allocatori personalizzati e/o contenitori specializzati e/o la riprogettazione dell'applicazione.


Linux
  1. Perché la rimozione di Iptables ha "rotto" l'accesso alla rete?

  2. Come accedere all'ultimo argomento di un comando commentato?

  3. Come accedere all'interfaccia Webmail in cPanel

  4. Come accedo al Pannello di controllo?

  5. Differenza tra l'heap Java e l'heap C nativo

Come limitare l'accesso agli editor di ONLYOFFICE agli utenti della tua istanza Nextcloud

Come limitare l'accesso dell'utente al sistema Linux

Ssh Port Forward per accedere alla macchina domestica da qualsiasi luogo?

Accesso ai registri di accesso non elaborati in cPanel

Vedi i punti di accesso wireless disponibili nel terminale?

Come accedo al volume collegato in Amazon EC2