我有这样的功能:
func TestDefer(lock sync.RWMutex, wait time.Duration) {
lock.Lock()
defer lock.Unlock()
// start goroutine
go func() {
time.Sleep(wait)
}()
}
我很想知道什么时候执行lock.Unlock()
?它是否与子例程 go func()
同步?它会等到它完成吗?
最佳答案
不,一旦 go
语句完成执行(即 Go 运行时创建一个新的 goroutine 并将其放入某个运行队列),函数的执行就会继续,并且由于函数体到此结束,
其中延迟的函数将运行。
goroutine 之间的同步只会显式发生——通过使用 sync
层次结构包中的原语的 channel 操作。
关于go - defer 会一直等到子程序执行完吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49108247/