锁所需要使用的变量
var must sync.Mutex
var mustR sync.RWMutex
func main() {
for {
go func() {
must.Lock()
fmt.Println("测试锁")
}()
}
}
你会发现他会一直堵塞,只会执行打印一次测试锁,除非解锁,否则只会一次。
func main() {
for i:=0;i<=100;i++ {
go func() {
//写锁定
must.Lock()
fmt.Println("这是被锁上的内容",i)
if i%2==0{
//写解除
must.Unlock()
fmt.Println("这是被解开的锁",i)
}
}()
}
}
通过这个,我们明确的发现互斥锁其实是会消耗时间的,即使消耗的时间非常小,当然对于实际应用场面这点时间可以忽略不计。
func main() {
for i:=0;i<=100;i++ {
go func() {
//读锁定
mustR.RLock()
fmt.Println("这是读锁定")
//读解锁
mustR.RUnlock()
}()
}
}
通过这个,我发现只要不涉及读的操作,他是不会堵塞的,所以fmt算是写操作
只会执行一次的操作函数
func main() {
s := &sync.Once{}
for {
s.Do(func() {
fmt.Println("sdfsd")
})
}
}