| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- package lock
- import (
- "fmt"
- "sync"
- "testing"
- )
- func TestLocal_GetLock(t *testing.T) {
- l := NewLocal()
- wg := sync.WaitGroup{}
- wg.Add(3)
- var l1 *sync.Mutex
- var l2 *sync.Mutex
- var l3 *sync.Mutex
- i := 0
- go func() {
- l1 = l.GetLock("key")
- fmt.Println("l1", l1, i)
- l1.Lock()
- fmt.Println("l1", i)
- i++
- l1.Unlock()
- wg.Done()
- }()
- go func() {
- l2 = l.GetLock("key")
- fmt.Println("l2", l2, i)
- l2.Lock()
- fmt.Println("l2", i)
- i++
- l2.Unlock()
- wg.Done()
- }()
- go func() {
- l3 = l.GetLock("key")
- fmt.Println("l3", l3, i)
- l3.Lock()
- fmt.Println("l3", i)
- i++
- l3.Unlock()
- wg.Done()
- }()
- wg.Wait()
- fmt.Println(l1, l2, l3)
- fmt.Println(l1 == l2, l2 == l3)
- fmt.Println(&sync.Mutex{} == &sync.Mutex{})
- }
- func TestLocal_Lock(t *testing.T) {
- l := NewLocal()
- wg := sync.WaitGroup{}
- wg.Add(3)
- i := 0
- go func() {
- l.Lock("key")
- fmt.Println("l1", i)
- i++
- l.UnLock("key")
- wg.Done()
- }()
- go func() {
- l.Lock("key")
- fmt.Println("l2", i)
- i++
- l.UnLock("key")
- wg.Done()
- }()
- go func() {
- l.Lock("key")
- fmt.Println("l3", i)
- i++
- l.UnLock("key")
- wg.Done()
- }()
- wg.Wait()
- }
- func TestSyncMap(t *testing.T) {
- m := sync.Map{}
- wg := sync.WaitGroup{}
- wg.Add(3)
- go func() {
- v, ok := m.LoadOrStore("key", 1)
- fmt.Println(1, v, ok)
- wg.Done()
- }()
- go func() {
- v, ok := m.LoadOrStore("key", 2)
- fmt.Println(2, v, ok)
- wg.Done()
- }()
- go func() {
- v, ok := m.LoadOrStore("key", 3)
- fmt.Println(3, v, ok)
- wg.Done()
- }()
- wg.Wait()
- }
|