lock_test.go 551 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. package lock
  2. import (
  3. "fmt"
  4. "sync"
  5. "testing"
  6. )
  7. func TestHighGranularityLock(t *testing.T) {
  8. l := NewGranularityLock()
  9. data := []int{}
  10. add := func(key int) {
  11. l.Lock(fmt.Sprintf("%d", key))
  12. data[key]++
  13. l.Unlock(fmt.Sprintf("%d", key))
  14. }
  15. for i := 0; i < 1000; i++ {
  16. data = append(data, 0)
  17. }
  18. wg := sync.WaitGroup{}
  19. for i := 0; i < 1000; i++ {
  20. wg.Add(1)
  21. go func() {
  22. for j := 0; j < 1000; j++ {
  23. add(j)
  24. }
  25. wg.Done()
  26. }()
  27. }
  28. wg.Wait()
  29. for _, v := range data {
  30. if v != 1000 {
  31. t.Fatal("data not equal")
  32. }
  33. }
  34. }