main.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package main
  2. import (
  3. "fmt"
  4. "sync/atomic"
  5. "time"
  6. )
  7. func main() {
  8. data := []int32{}
  9. tcount := int32(1000000000)
  10. counta := int32(0)
  11. countb := int32(0)
  12. countc := int32(0)
  13. countd := int32(0)
  14. go func() {
  15. for i := int32(0); i < tcount; i++ {
  16. go func() {
  17. go func() {
  18. // time.Sleep(10 * time.Microsecond)
  19. data = append(data, atomic.AddInt32(&counta, 1))
  20. }()
  21. go func() {
  22. // time.Sleep(10 * time.Microsecond)
  23. data = append(data, atomic.AddInt32(&countb, 1))
  24. }()
  25. go func() {
  26. // time.Sleep(10 * time.Microsecond)
  27. data = append(data, atomic.AddInt32(&countc, 1))
  28. }()
  29. go func() {
  30. // time.Sleep(10 * time.Microsecond)
  31. data = append(data, atomic.AddInt32(&countd, 1))
  32. }()
  33. }()
  34. time.Sleep(1 * time.Microsecond)
  35. }
  36. }()
  37. to := time.Now()
  38. for counta < tcount && countb < tcount && countc < tcount && countd < tcount {
  39. if time.Since(to) > 1000*time.Millisecond {
  40. println("......")
  41. go fmt.Println(time.Now().String()[:23], " ", counta, " ", countb, " ", countc, " ", countd)
  42. to = time.Now()
  43. }
  44. time.Sleep(1 * time.Microsecond)
  45. }
  46. fmt.Println(time.Now().String()[:23], " ", counta, " ", countb, " ", countc, " ", countd)
  47. }