Maison > développement back-end > C++ > La file d'attente délimitée Liblfds est-elle vraiment sans verrouillage ?

La file d'attente délimitée Liblfds est-elle vraiment sans verrouillage ?

DDD
Libérer: 2024-12-09 14:23:17
original
195 Les gens l'ont consulté

Is the Liblfds Bounded Queue Truly Lock-Free?

Garanties de progression sans verrouillage dans une file d'attente de tampon circulaire

Aperçu :

De nombreux programmeurs croire à tort que « sans verrouillage » fait simplement référence à une programmation simultanée sans mutex. Cependant, de véritables algorithmes sans verrouillage offrent des garanties de progression, garantissant qu'au moins un thread peut progresser quelles que soient les actions des autres threads.

La file d'attente délimitée Liblfds :

L'implémentation d'une file d'attente limitée dans la bibliothèque liblfds semble discutable en termes de garanties de progression sans verrouillage. L'algorithme réserve des emplacements pour le push, ce qui signifie que les emplacements ne peuvent pas être ouverts tant que le thread de push n'est pas terminé. Cette dépendance soulève des inquiétudes quant à savoir si la file d'attente est réellement considérée comme sans verrouillage.

Définition de Lock-Free :

Une structure sans verrouillage est une structure dans laquelle n'importe quel thread peut être suspendu indéfiniment à tout moment sans empêcher les autres threads d'utiliser la structure. Selon cette définition, la file d'attente liblfds n'est pas strictement sans verrouillage. Si un thread de transmission est suspendu, la file d'attente entre dans un état inutilisable, violant le contrat d'une file d'attente de taille fixe.

Performances vs exactitude :

Pendant cette implémentation peut présenter des propriétés de performances raisonnables, il lui manque certaines propriétés d'exactitude critiques d'une structure véritablement sans verrouillage. Les principales lacunes fonctionnelles incluent :

  1. Terminaison de thread asynchrone : La file d'attente n'est pas sûre pour une utilisation par des threads qui peuvent se terminer exceptionnellement dans la région critique, laissant la structure dans un état incohérent.
  2. Accès à la file d'attente à partir d'interruptions ou de signaux : La file d'attente prend en charge la mutation de base et l'accès à partir d'interruptions, mais son comportement est limitée par rapport aux véritables structures sans verrouillage.

Conclusion :

L'implémentation de la file d'attente délimitée par liblfds n'est pas à la hauteur de la définition la plus stricte de l'absence de verrouillage. Il offre certains avantages en termes de performances mais manque de certaines garanties fonctionnelles qui sont cruciales pour garantir la progression et l'exactitude dans tous les scénarios.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal