go - defer 会一直等到子程序执行完吗?

标签 go deferred subroutine goroutine

我有这样的功能:

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/

相关文章:

select - 在 Go 中使用 select 有上限吗?

javascript - JavaScript 中的 Deferred、Promise 和 Future 有什么区别?

javascript - 为什么在此函数中返回 jquery AJAX promise 无法提供数据?

JQuery - 延迟对象数组的 $.when 语法

vb.net - Sub 检查文本框中的大小,vb

arrays - 更改数组元素无效

mongodb - mongo-go-driver获取插入的文档

客户端的 ssl 版本和密码套件

arrays - Qbasic - 尝试调用子系统,但我收到一条消息,显示 "Expected CALL, subname, (...)"

perl - 修改子程序参数(Perl)