Puzzle 22 Explanation: Go Count
Understand how different packages work in Go.
We'll cover the following...
We'll cover the following...
Try it yourself
Try executing the code below to see the result.
Go (1.16.5)
package mainimport ("fmt""sync")func main() {var count intvar wg sync.WaitGroupfor i := 0; i < 1_000_000; i++ {wg.Add(1)go func() {defer wg.Done()count++}()}wg.Wait()fmt.Println(count)}
Explanation
What we have here is a race condition. We don’t have an atomic operation, which means the code to increment an integer is interrupted mid-operation. Besides, there is the memory barrier. To speed things up, modern computers try to fetch values from a CPU cache before going the long way to the main memory. ...