Ils peuvent être utiles pour simultanés des structures de données.
(Il y a maintenant un non-simultanées de l'usage du monde réel de l'échantillon ci - dessous-qui n'en seraient pas là si @Neil n'avait pas mentionné le FORTRAN. ;-)
Par exemple, ConcurrentDictionary<TKey, TValue>
.NET 4.0 RC utilisation des listes liées à la chaîne des éléments de hachage pour le même seau.
Les données sous-jacentes de la structure pour ConcurrentStack<T>
est également une liste liée.
ConcurrentStack<T>
est l'une des structures de données qui servira de base pour le nouveau Pool de Threads, (avec la section locale de "files d'attente", mis en œuvre sous la forme de piles, essentiellement). (L'autre principale structure porteuse, ConcurrentQueue<T>
.)
Le nouveau Pool de Threads à son tour, fournit la base pour la planification du travail de la nouvelle
Task Parallel Library.
Donc ils peuvent certainement être utile - une liste chaînée est actuellement l'une des principales structures de support d'au moins une nouvelle technologie.
(Une liste liée individuellement fait une convaincante lock-gratuit - mais pas d'attente libre de choix dans ces cas, parce que les principales opérations peuvent être réalisées avec un seul CAS(+de tentatives).
Dans un cadre moderne GC-d de l'environnement, tels que Java et .NET - l' ABA problème peut facilement être évité.
Juste emballer les articles que vous ajoutez dans fraîchement créé nœuds et de ne pas réutiliser ces nœuds - laissez-le GC à faire son travail.
La page sur l'ABA problème prévoit également la mise en œuvre d'une serrure sans pile qui fonctionne réellement .Net (&Java) avec un (GC-ed) Nœud de la tenue de la éléments.)
Edit:
@Neil:
en fait, ce que vous avez mentionné à propos de FORTRAN m'a rappelé que le même genre de listes liées peuvent être trouvés dans probablement le plus utilisé et abusé de la structure de données .NET:
de la plaine .NET générique Dictionary<TKey, TValue>
.
Pas un, mais plusieurs listes sont stockées dans un tableau.
- Il évite de faire de nombreuses petites (de)dotations sur les insertions/suppressions.
- Le chargement Initial de la table de hachage est assez rapide, parce que le tableau est rempli de manière séquentielle (joue très agréable avec de cache du PROCESSEUR).
- Pour ne pas mentionner que d'un chaînage de la table de hachage est cher en termes de mémoire et de ce "truc" coupes "pointeur tailles" dans la moitié sur x64.
Essentiellement, de nombreux listes chaînées sont stockées dans un tableau. (un pour chaque seau utilisé.)
Une liste gratuite de réutilisables nœuds est "imbriqués" entre eux (comme si il y avait des suppressions).
Un tableau est alloué à la start/sur le réchauffé, et les nœuds de chaînes sont conservés. Il est également libre de l'aiguille d'un index dans le tableau qui suit supprime. ;-) Alors, - croyez-le ou pas - le FORTRAN technique vit toujours. (...et nulle part ailleurs, que dans l'un des plus couramment utilisé .NET des structures de données ;-).