package main import ( "fmt" "sync/atomic" "time" ) func main() { data := []int32{} tcount := int32(1000000000) counta := int32(0) countb := int32(0) countc := int32(0) countd := int32(0) go func() { for i := int32(0); i < tcount; i++ { go func() { go func() { // time.Sleep(10 * time.Microsecond) data = append(data, atomic.AddInt32(&counta, 1)) }() go func() { // time.Sleep(10 * time.Microsecond) data = append(data, atomic.AddInt32(&countb, 1)) }() go func() { // time.Sleep(10 * time.Microsecond) data = append(data, atomic.AddInt32(&countc, 1)) }() go func() { // time.Sleep(10 * time.Microsecond) data = append(data, atomic.AddInt32(&countd, 1)) }() }() time.Sleep(1 * time.Microsecond) } }() to := time.Now() for counta < tcount && countb < tcount && countc < tcount && countd < tcount { if time.Since(to) > 1000*time.Millisecond { println("......") go fmt.Println(time.Now().String()[:23], " ", counta, " ", countb, " ", countc, " ", countd) to = time.Now() } time.Sleep(1 * time.Microsecond) } fmt.Println(time.Now().String()[:23], " ", counta, " ", countb, " ", countc, " ", countd) }