Une file d'attente peut-elle être sans verrouillage si les opérations PUSH peuvent bloquer les opérations POP ?
De manière anecdotique, « sans verrouillage » est souvent utilisé à tort. pour signifier « programmation simultanée sans mutex ». Les algorithmes sans verrouillage fournissent en fait des garanties de progression quelles que soient les actions des autres threads. Cela signifie qu'il ne devrait y avoir aucun code dans lequel un thread dépend d'un autre pour continuer.
Considérez une file d'attente de tampon circulaire dans liblfds, qui vise la concurrence sans mutex explicites. L'algorithme PUSH consiste à réserver un emplacement en comparant l'index d'écriture et en mettant à jour le numéro de séquence. Bien qu'efficace avec un seul CAS, cela soulève des questions sur l'absence de verrouillage.
D'une part, les threads peuvent toujours être mis en file d'attente si des emplacements sont disponibles. Mais d'un autre côté, si une opération PUSH est interrompue avant la mise à jour du numéro de séquence, les opérations POP suivantes échoueront, faisant apparaître la file d'attente vide.
Selon la définition de l'absence de verrouillage comme « une structure est utilisable si tout thread est suspendu indéfiniment", cette file d'attente n'est pas strictement sans verrouillage. Il dispose d'un mécanisme mutex caché (l'index d'écriture et le numéro de séquence), dans lequel les rédacteurs peuvent ne pas parvenir à insérer des éléments en raison d'un rédacteur suspendu dans la région critique.
Cependant, la file d'attente peut toujours présenter certaines propriétés utiles. Il offre des performances raisonnables et non contestées en raison de sa faible surcharge, gère raisonnablement les performances contestées et est partiellement immunisé contre les changements de contexte. De plus, il prend en charge l'accès à la file d'attente à partir d'interruptions ou de signaux, bien qu'il ait des limites dans la gestion de la terminaison asynchrone des threads.
Bien que la file d'attente liblfds ne réponde pas entièrement à la définition stricte de l'absence de verrouillage, elle peut quand même être bénéfique pour certains candidatures. Il offre des garanties de progrès partielles et des caractéristiques de performance décentes, sans la complexité des solutions basées sur mutex.
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!