42 lines
661 B
Go
42 lines
661 B
Go
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()
|
|
}
|