1234567891011121314151617181920212223242526272829303132333435363738394041 |
- package lock
- import (
- "fmt"
- "sync"
- "testing"
- )
- func TestHighGranularityLock(t *testing.T) {
- l := NewGranularityLock()
- data := []int{}
- add := func(key int) {
- l.Lock(fmt.Sprintf("%d", key))
- data[key]++
- l.Unlock(fmt.Sprintf("%d", key))
- }
- for i := 0; i < 1000; i++ {
- data = append(data, 0)
- }
- wg := sync.WaitGroup{}
- for i := 0; i < 1000; i++ {
- wg.Add(1)
- go func() {
- for j := 0; j < 1000; j++ {
- add(j)
- }
- wg.Done()
- }()
- }
- wg.Wait()
- for _, v := range data {
- if v != 1000 {
- t.Fatal("data not equal")
- }
- }
- }
|