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

62 lines
633 B
Go

package main
import "fmt"
func listing1() {
i := 0
go func() {
i++
}()
}
func listing2() {
i := 0
go func() {
i++
}()
fmt.Println(i)
}
func listing3() {
i := 0
ch := make(chan struct{})
go func() {
<-ch
fmt.Println(i)
}()
i++
ch <- struct{}{}
}
func listing4() {
i := 0
ch := make(chan struct{})
go func() {
<-ch
fmt.Println(i)
}()
i++
close(ch)
}
func listing5() {
i := 0
ch := make(chan struct{}, 1)
go func() {
i = 1
<-ch
}()
ch <- struct{}{}
fmt.Println(i)
}
func listing6() {
i := 0
ch := make(chan struct{})
go func() {
i = 1
<-ch
}()
ch <- struct{}{}
fmt.Println(i)
}