J'ai ce bout de code simpliste (ou ici https://play.golang.org/p/KW8_OHUp9v )
package main
import (
"fmt"
"sync"
)
func main() {
mutex := new(sync.Mutex)
for i := 1; i < 5; i++ {
for j := 1; j < 5; j++ {
mutex.Lock()
go func() {
fmt.Printf("%d + %d = %d\n", i, j, j+i)
mutex.Unlock()
}()
}
}
}
Il produit un résultat comme celui-ci
1 + 2 = 3
1 + 3 = 4
1 + 4 = 5
2 + 5 = 7
2 + 2 = 4
2 + 3 = 5
2 + 4 = 6
3 + 5 = 8
3 + 2 = 5
3 + 3 = 6
3 + 4 = 7
4 + 5 = 9
4 + 2 = 6
4 + 3 = 7
4 + 4 = 8
Program exited.
En regardant les résultats, j'ai été surpris par plusieurs choses :
- Il n'y a pas de "1" pour le
j
- Il y a des "5" pour les
j
- Il n'y a que 3 valeurs pour i=1, au lieu de 4
Je peux comprendre l'absence de "1" car la variable est incrémentée avant d'être écrite.
Quelqu'un peut-il expliquer les points 2 et 3 ?