100-go-mistakes/08-concurrency-foundations/58-races/races/main.go
2021-12-27 15:57:20 +01:00

80 lines
718 B
Go

package races
import (
"sync"
"sync/atomic"
)
func listing1() {
i := 0
go func() {
i++
}()
go func() {
i++
}()
}
func listing2() {
var i int64
go func() {
atomic.AddInt64(&i, 1)
}()
go func() {
atomic.AddInt64(&i, 1)
}()
}
func listing3() {
i := 0
mutex := sync.Mutex{}
go func() {
mutex.Lock()
i++
mutex.Unlock()
}()
go func() {
mutex.Lock()
i++
mutex.Unlock()
}()
}
func listing4() {
i := 0
ch := make(chan int)
go func() {
ch <- 1
}()
go func() {
ch <- 1
}()
i += <-ch
i += <-ch
}
func listing5() {
i := 0
mutex := sync.Mutex{}
go func() {
mutex.Lock()
i = 1
mutex.Unlock()
}()
go func() {
mutex.Lock()
i = 2
mutex.Unlock()
}()
}