package expirelock import ( "fmt" "sync" "testing" "time" ) func TestLock_Lock(t *testing.T) { lock(NewBlock()) } func TestLock_SpinLock(t *testing.T) { lock(NewSpin()) } func lock(lock ExpireLocker) { wg := sync.WaitGroup{} for i := 0; i < 10; i++ { wg.Add(1) go func(i int) { lock.Lock(1 * time.Second) fmt.Printf("go: %d, lock\n", i) time.Sleep(1 * time.Second) fmt.Println(lock.Unlock()) fmt.Printf("go: %d, unlock\n", i) wg.Done() }(i) } lock.Lock(0) fmt.Println(lock.Unlock()) //lock.Lock(1 * time.Second) time.Sleep(1500 * time.Millisecond) lock.Lock(1 * time.Second) fmt.Println(lock.Unlock()) wg.Wait() }