Maison > développement back-end > Golang > Comment puis-je vérifier efficacement si un canal Go Buffered est plein ?

Comment puis-je vérifier efficacement si un canal Go Buffered est plein ?

Linda Hamilton
Libérer: 2024-12-14 11:14:10
original
420 Les gens l'ont consulté

How Can I Efficiently Check if a Go Buffered Channel is Full?

Comment vérifier si un canal tamponné est plein

Dans Go, les canaux tamponnés ont une capacité limitée pour stocker des données. Lorsque le canal est plein, l’envoi de données bloquera l’expéditeur. Cependant, si vous souhaitez supprimer des données au lieu de les bloquer, comment pouvez-vous déterminer si le canal est plein ?

Solution utilisant l'instruction Select

Une façon de vérifier si un Le canal tampon est plein consiste à utiliser l'instruction select avec un cas par défaut. Si aucun des cas ne peut être exécuté, comme l'envoi de données à un canal complet, le cas par défaut sera exécuté.

package main

import "fmt"

func main() {
    ch := make(chan int, 1)

    // Fill it up
    ch <- 1

    select {
    case ch <- 2: // Put 2 in the channel unless it is full
    default:
        fmt.Println("Channel full. Discarding value")
    }
}
Copier après la connexion

Sortie :

Channel full. Discarding value
Copier après la connexion

Ce code crée un canal tamponné de taille 1 et envoie une valeur pour le remplir. L'instruction select tente ensuite d'envoyer une autre valeur au canal. Si le canal est plein, le cas par défaut est exécuté, en imprimant un message et en supprimant la valeur.

Vérifier sans envoi

Alternativement, vous pouvez vérifier le nombre d'éléments mis en file d'attente dans un canal en utilisant len(ch). Cela vous permet de déterminer si un canal est plein sans tenter d'envoyer des données.

if len(ch) == cap(ch) {
    // Channel was full, but might not be by now
} else {
    // Channel wasn't full, but might be by now
}
Copier après la connexion

Cependant, notez que le résultat de la comparaison peut devenir invalide au moment où vous entrez le bloc if en raison d'un flux de données simultané. .

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