golang 条件变量&发送通知&接受通知&广播

code · · 1218 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

3个指针方法:

    Wait()  等待goroutine 等待接受通知,Single() Broadcast() 解除阻塞
    Single() 发送通知,如果存在多个goroutine,只会任意选择一个
    Broadcast() 广播 方法给所有人

下面时wait方法底层执行流程

  1. 尝试解锁
  2. wait 尝试解锁,解完锁之后等待其他给发通知,===> 进入了阻塞状态,等待被唤醒: single(),broadcast()
  3. 一旦被唤醒后,又会锁定
func (c *Cond) Wait() {
    c.checker.check()
    t := runtime_notifyListAdd(&c.notify)
    c.L.Unlock()
    runtime_notifyListWait(&c.notify, t)
    c.L.Lock()
}

操作案例:

sync.Cond

有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:code

查看原文:golang 条件变量&发送通知&接受通知&广播

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1218 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传