4 votes

Est-ce que les Mutexes ont besoin d'une initialisation en Go?

Je suis en train d'écrire quelque chose de thread-safe en Go. J'essaie d'utiliser des mutex.

L'exemple que j'ai trouvé ici semble utiliser les mutex sans aucune initialisation :

...
// partie essentielle de la page en question
// (ce n'est pas mon code, je sais que le pointeur n'est pas nécessaire ici,
// c'est le code du site mentionné dans le lien - @peterh)

var mutex = &sync.Mutex{}
var readOps uint64 = 0
var writeOps uint64 = 0

for r := 0; r < 100; r++ {
    go func() {
        total := 0
        for {
            key := rand.Intn(5)
            mutex.Lock()
....

Je suis un peu surpris. Est-ce vrai qu'ils n'ont pas besoin d'initialisation?

10voto

Kenny Grant Points 2078

Un mutex n'a pas besoin d'initialisation.

Aussi, cela pourrait juste être var mutex sync.Mutex, il n'est pas nécessaire d'avoir un pointeur, de même pour les valeurs int, il n'est pas nécessaire de les définir à 0, donc cet exemple que vous avez trouvé pourrait être amélioré. Dans tous ces cas, la valeur zéro est suffisante.

Consultez ce morceau de code efficace :

https://golang.org/doc/effective_go.html#data

Comme la mémoire retournée par new est initialisée à zéro, il est utile de concevoir vos structures de données de manière à ce que la valeur zéro de chaque type puisse être utilisée sans autre initialisation. Cela signifie qu'un utilisateur de la structure de données peut en créer une avec new et commencer immédiatement à travailler. Par exemple, la documentation pour bytes.Buffer indique que "la valeur zéro pour Buffer est un tampon vide prêt à l'emploi." De même, sync.Mutex n'a pas de constructeur explicite ou de méthode Init. À la place, la valeur zéro pour un sync.Mutex est définie comme un mutex déverrouillé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X