Files
deep_go/lessons/channels/deadlock/main.go

47 lines
522 B
Go
Raw Normal View History

package main
import (
"sync"
)
var actions int
var mutex sync.Mutex
var buffer chan struct{}
func consumer() {
for i := 0; i < 1000; i++ {
mutex.Lock()
actions++
<-buffer
mutex.Unlock()
}
}
func producer() {
for i := 0; i < 1000; i++ {
buffer <- struct{}{}
mutex.Lock()
actions++
mutex.Unlock()
}
}
func main() {
wg := sync.WaitGroup{}
wg.Add(2)
buffer = make(chan struct{}, 1)
go func() {
defer wg.Done()
consumer()
}()
go func() {
defer wg.Done()
producer()
}()
wg.Wait()
}