4 votes

.NET : pourquoi stocker un bloc de synchronisation dans chaque objet ?

Dans .NET, pourquoi lock(someObject) mis en œuvre comme il l'est ? De la façon dont je le vois, il y avait deux options pour stocker les informations de synchronisation :

  1. Table de hachage globale pour la carte memory address -> synchronization info
  2. Stocker le pointeur ou l'index dans synchronization info dans chaque objet qui pourrait être verrouillé.

Dans la première implémentation, il n'y a pas de surcharge de mémoire pour les objets qui ne sont pas verrouillés - ils n'ont pas d'entrées dans la table de hachage. Cependant, .NET utilise la deuxième implémentation, en stockant un champ Sync Block Index dans l'en-tête de chaque objet .NET, même ceux qui ne sont jamais verrouillés.

Quelle est la motivation de ce choix ? Pour quels scénarios est-il optimisé ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X