代码拉取完成,页面将自动刷新
package tlock
import (
"sync"
"time"
. "gopkg.in/check.v1"
)
type lockTestSuite struct {
}
var _ = Suite(&lockTestSuite{})
func (s *lockTestSuite) TestKeyLock(c *C) {
g := NewKeyLockerGroup()
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
g.Lock("a", "b")
g.Unlock("a", "b")
}()
time.Sleep(1 * time.Second)
g.Lock("b", "a")
g.Unlock("a", "b")
wg.Wait()
wg.Add(1)
go func() {
defer wg.Done()
g.Lock("a")
time.Sleep(2 * time.Second)
g.Unlock("a")
}()
time.Sleep(1 * time.Second)
b := g.LockTimeout(100*time.Millisecond, "a")
c.Assert(b, Equals, false)
wg.Wait()
b = g.LockTimeout(100*time.Millisecond, "a")
c.Assert(b, Equals, true)
g.Unlock("a")
wg.Add(1)
go func() {
defer wg.Done()
g.Lock("a")
time.Sleep(2 * time.Second)
g.Unlock("a")
}()
time.Sleep(1 * time.Second)
b = g.LockTimeout(100*time.Millisecond, "a")
c.Assert(b, Equals, false)
wg.Wait()
b = g.LockTimeout(100*time.Millisecond, "a")
c.Assert(b, Equals, true)
g.Unlock("a")
}
func (s *lockTestSuite) TestPathLock(c *C) {
g := NewPathLockerGroup()
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
g.Lock("a/b")
g.Unlock("a/b")
}()
time.Sleep(1 * time.Second)
g.Lock("a/b")
g.Unlock("a/b")
wg.Wait()
wg.Add(1)
go func() {
defer wg.Done()
g.Lock("a")
time.Sleep(2 * time.Second)
g.Unlock("a")
}()
time.Sleep(1 * time.Second)
b := g.LockTimeout(100*time.Millisecond, "a/b")
c.Assert(b, Equals, false)
wg.Wait()
b = g.LockTimeout(100*time.Millisecond, "a/b")
c.Assert(b, Equals, true)
g.Unlock("a/b")
wg.Add(1)
go func() {
defer wg.Done()
g.Lock("a/b")
time.Sleep(2 * time.Second)
g.Unlock("a/b")
}()
time.Sleep(1 * time.Second)
b = g.LockTimeout(100*time.Millisecond, "a")
c.Assert(b, Equals, false)
wg.Wait()
b = g.LockTimeout(100*time.Millisecond, "a")
c.Assert(b, Equals, true)
g.Unlock("a")
g.Lock("a/b/c")
g.Lock("a/b/d")
g.Unlock("a/b/c")
g.Unlock("a/b/d")
}
func (s *lockTestSuite) TestDuplicatedNames(c *C) {
g1 := NewKeyLockerGroup()
g1.Lock("a", "a")
g1.Unlock("a", "a")
g2 := NewPathLockerGroup()
g2.Lock("a/b/c", "a/b/c")
g2.Unlock("a/b/c", "a/b/c")
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。