Le code démontre une mise en œuvre de sémaphore en Go en utilisant un canal tamponné. Le sémaphore est créé avec une capacité de 10, autorisant un maximum de 10 processus simultanés. La fonction principale itère 1000 fois, envoyant un entier au canal de sémaphore à chaque itération. Si le canal est plein, la boucle est bloquée jusqu'à ce qu'une valeur soit libérée du canal. Un nouveau goroutine est lancé pour chaque itération, qui imprime un message de départ, puis dort pendant une durée aléatoire comprise entre 0 et 20 secondes. Lorsque le goroutine termine, il libère une valeur du canal de sémaphore, la rendant disponible pour la prochaine itération. La libération de la valeur est faite en utilisant l'instruction `<- sem`, qui récupère également la valeur d'origine envoyée au canal. Le programme imprime des messages de départ et de fin pour chaque processus, y compris l'identifiant du processus et la durée qu'il a prise pour se terminer. La sortie montre que les processus sont exécutés de manière concurrente, avec un maximum de 10 processus s'exécutant en même temps. Le programme utilise les packages `time` et `math/rand` pour introduire de l'aléatoire dans la durée de sommeil.
dev.to
Implement semaphore in golang by buffered channel
Create attached notes ...
