package main
import (
"sync"
)
type data struct {
sync.Mutex
}
func (d data)test(s string){
d.Lock()
defer d.Unlock()
for i:=0;i<5 ;i++ {
println(s,i)
//time.Sleep(time.Second)
}
}
func test_lock(){
var wg sync.WaitGroup
wg.Add(3)
var d data
go func() {
defer wg.Done()
d.test("write")
}()
go func() {
defer wg.Done()
d.test("read")
}()
go func() {
defer wg.Done()
d.test("new")
}()
wg.Wait()
}
func main(){
test_lock()
}
d.lock阻塞,不是应该write全部打完再打印其他的吗?为啥write打印一部分后new可以获得锁
func (d data)test(s string){
d.Lock()
defer d.Unlock()
for i:=0;i<5 ;i++ {
}
}
指针的问题,(d data)相当于复制了多个锁给协程用,(d *data)就变成一个锁,就没问题了