GNU/Linux >> Tutoriels Linux >  >> Linux

L'accès au tas est-il sérialisé ?

new et delete sont thread-safe

Les fonctions suivantes doivent être thread-safe :

  • Les versions de bibliothèque de operator new et operator delete
  • Versions utilisateur de remplacement du operator new global et operator delete
  • std::calloc , std::malloc , std::realloc , std::aligned_alloc , std::free

Les appels à ces fonctions qui allouent ou désallouent une unité de stockage particulière se produisent dans un seul ordre total, et chacun de ces appels de désallocation se produit avant la prochaine allocation (le cas échéant) dans cet ordre.

Avec gcc, new est implémenté en déléguant à malloc , et on voit que leur malloc utilise en effet une serrure. Si vous craignez que votre allocation ne provoque des goulots d'étranglement, écrivez votre propre répartiteur.


La réponse est oui, mais en pratique c'est habituellement pas un problème. Si c'est un problème pour vous, vous pouvez essayer de remplacer votre implémentation de malloc par tcmalloc qui réduit, mais n'élimine pas les conflits possibles (puisqu'il n'y a qu'un seul tas qui doit être partagé entre les threads et les processus).

TCMalloc attribue à chaque thread un cache local de thread. Les petites allocations sont satisfaites à partir du cache local des threads. Les objets sont déplacés des structures de données centrales vers un cache local de thread selon les besoins, et des récupérations de place périodiques sont utilisées pour migrer la mémoire d'un cache local de thread vers les structures de données centrales.

Il existe également d'autres options telles que l'utilisation d'allocateurs personnalisés et/ou de conteneurs spécialisés et/ou la refonte de votre application.


Linux
  1. Les autorisations du répertoire parent sont-elles importantes lors de l'accès à un sous-répertoire ?

  2. Comment accéder à l'historique à la volée sous Unix ?

  3. La bonne façon d'accéder à un fichier d'aide spécifique dans Vim ?

  4. Différence entre le tas Java et le tas C natif

  5. Comment implémenter readlink pour trouver le chemin

Comment restreindre l'accès aux éditeurs ONLYOFFICE aux utilisateurs de votre instance Nextcloud

Comment limiter l'accès de l'utilisateur au système Linux

Transfert de port Ssh pour accéder à la machine domestique depuis n'importe où ?

Accéder aux journaux d'accès bruts dans cPanel

Voir les points d'accès sans fil disponibles dans le terminal ?

Comment accéder au volume attaché dans Amazon EC2