package main
import (
"log"
"math/rand"
"sync"
"time"
)
func main() {
var cc = make([]*sync.Mutex, 1001)
for i := 0; i < len(cc); i++ {
m := &sync.Mutex{}
m.Lock()
cc[i] = m
}
for i := 1000; i > 0; i-- {
go gog(i, cc)
}
cc[0].Unlock()
cc[1000].Lock()
cc[1000].Unlock()
}
func gog(index int, cc []*sync.Mutex) {
cc[index-1].Lock()
time.Sleep(time.Millisecond * time.Duration(rand.Intn(20)))
log.Println(index)
cc[index-1].Unlock()
cc[index].Unlock()
}