Golang est un langage de programmation efficace, concis et simultané. Dans Golang, cond est un outil utilisé pour contrôler l'exécution simultanée de programmes. Cet article présentera l'utilisation de cond en détail.
1. Introduction de base à cond
Cond signifie variable de condition. Il s'agit d'un mécanisme de contrôle de concurrence important dans Golang. La fonction principale de cond est de permettre à plusieurs goroutines d'attendre que l'état d'une variable partagée change en même temps et de notifier la goroutine en attente d'effectuer des opérations ultérieures lorsque l'état de la variable partagée change. Contrairement à mutex, cond ne peut pas être utilisé pour protéger l'accès simultané aux variables partagées, il doit s'appuyer sur mutex pour être exécuté. Son utilisation de base est très simple et se divise en trois étapes :
Dans les applications pratiques, cond est généralement utilisé en combinaison avec mutex pour obtenir un accès sécurisé simultané aux variables partagées. Ce qui suit est un exemple de programme simple qui montre comment utiliser cond pour contrôler l'exécution simultanée de plusieurs goroutines :
package main import ( "fmt" "sync" ) var ( count int mutex sync.Mutex cond *sync.Cond = sync.NewCond(&mutex) ) func worker() { for { mutex.Lock() for count < 10 { cond.Wait() } count-- fmt.Printf("worker: %d\n", count) mutex.Unlock() cond.Signal() } } func main() { for i := 0; i < 10; i++ { go worker() } for { mutex.Lock() if count >= 10 { mutex.Unlock() break } count++ fmt.Printf("main: %d\n", count) mutex.Unlock() cond.Signal() } }
Dans cet exemple de code, count représente une variable partagée avec une valeur initiale de 0, indiquant le nombre de tâches qui peuvent être exécuté. Lorsque la valeur du nombre de variables partagées est inférieure à 10, toutes les goroutines de travail attendront que la valeur du nombre de variables partagées soit augmentée à plus de 10 avant d'être réveillées.
Dans la goroutine principale, augmentez la valeur du nombre de variables partagées en appelant la fonction cond.Signal() dans une boucle et informez les goroutines de travail en attente de continuer l'exécution. Lorsque la valeur du nombre de variables partagées est augmentée à 10, la goroutine principale cesse d'appeler la fonction cond.Signal() et toutes les goroutines de travail quittent l'exécution.
Il convient de noter que lorsqu'une goroutine attend cond, elle libère automatiquement le verrou mutex afin que d'autres goroutines puissent accéder aux variables partagées. Une fois réveillée, la goroutine doit réacquérir le verrou mutex pour continuer l'exécution.
3. Notes sur cond
Bien que l'utilisation de cond soit un mécanisme de synchronisation efficace par rapport au mécanisme traditionnel de variable de condition, il y a également des points auxquels il faut prêter attention lors de son utilisation :
la fonction cond.Wait() doit toujours Utilisé dans une boucle for pour éviter les faux réveils. Plus précisément, le jugement des conditions d'attente doit être ajouté au réveilLe mécanisme de contrôle de concurrence de Golang est très puissant grâce aux deux mécanismes de contrôle de concurrence de base que sont mutex et cond, de puissants programmes simultanés peuvent être réalisés. Lors de l'utilisation de cond, vous devez faire attention à ses méthodes et précautions d'utilisation de base, et comprendre le principe de fonctionnement du mécanisme cond afin de mieux jouer son rôle.
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!