Maison > développement back-end > Golang > Comment vérifier si une chaîne est fermée en Go sans la lire ?

Comment vérifier si une chaîne est fermée en Go sans la lire ?

Mary-Kate Olsen
Libérer: 2024-11-14 17:11:02
original
394 Les gens l'ont consulté

How to Check If a Channel is Closed in Go Without Reading From It?

Vérification des chaînes fermées sans les lire

Dans les situations où vous devez déterminer si une chaîne est fermée sans la lire, il existe actuellement, aucun moyen direct de le faire dans Go. L'exemple de code fourni par @Jimt sert d'illustration pratique du mode Workers et Controller. Cependant, il est confronté à un problème lorsqu'il tente de supprimer un canal de travail de la tranche de travail après la sortie du travailleur.

Comprendre le problème

Fermer le canal de travail directement depuis dans worker() provoquerait une panique lorsque le contrôleur tenterait d'y écrire, car l'écriture sur un canal fermé n'est pas autorisée. D'un autre côté, l'utilisation d'un mutex pour empêcher l'accès simultané entraînerait un blocage car le travailleur ne lit pas sur le canal et l'écriture sera bloquée.

Solutions potentielles

  • Essayer de lire à partir du canal : Tenter de lire à partir du canal du contrôleur bloquerait le exécution.
  • Approche de récupération hacky : La récupération après la panique déclenchée lors de l'écriture sur un canal fermé peut être utilisée dans des cas spécifiques, mais elle peut également conduire à la fermeture de la goroutine du contrôleur, ce qui n'est pas le cas. souhaitable.
  • Agrandissement du tampon de canal : L'augmentation de la taille du tampon de canal fournirait une solution temporaire, mais ce n'est pas le cas. idéal.

Conclusion

L'absence d'un mécanisme permettant de vérifier directement si un canal est fermé sans le lire est considéré comme une limitation dans certains scénarios. Bien que des solutions de contournement existent, elles ne constituent peut-être pas des solutions optimales. L'implémentation d'une fonction permettant de vérifier les canaux fermés pourrait être un ajout précieux aux futures versions du langage de programmation Go.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal