您的位置 首页 知识分享

singleflight.Do 中 shared 参数始终为 true 的原因是什么?

singleflight.do 中 shared 参数始终为 true 问题:在使用 singleflight…

singleflight.Do 中 shared 参数始终为 true 的原因是什么?

singleflight.do 中 shared 参数始终为 true

问题:
在使用 singleflight.do 函数时,发现第三个布尔参数 shared 总是返回 true。为什么在这种情况下,不应至少有一个协程返回 false 呢?

环境:

  • 7
  • 8 核 cpu
  • go 1.14

代码示例:

package main  import (     "fmt"     "sync"     "time"      "golang.org/x/sync/singleflight" )  func main() {     g := singleflight.group{}      wg := sync.waitgroup{}      for i := 0; i <p><strong>结果:</strong></p><pre class="brush:php;toolbar:false">index: 0, val: 1, shared: true index: 1, val: 1, shared: true index: 2, val: 1, shared: true index: 3, val: 1, shared: true index: 4, val: 1, shared: true index: 5, val: 1, shared: true index: 6, val: 1, shared: true index: 7, val: 1, shared: true
登录后复制

解答:

你对 shared 参数的理解有误。shared 参数指示的是返回的 val 是否被多个调用者共享。

只有在一个调用者的协程执行时,而其他协程没有执行,该 val 才属于其独占,此时才会返回 false。

在示例代码中,所有 8 个协程同时执行,因此 val 始终被多个调用者共享,导致 shared 参数始终为 true。

以上就是singleflight.Do 中 shared 参数始终为 true 的原因是什么?的详细内容,更多请关注php中文网其它相关文章!

本文来自网络,不代表甲倪知识立场,转载请注明出处:http://www.spjiani.cn/wp/3835.html

作者: nijia

发表评论

您的电子邮箱地址不会被公开。

联系我们

联系我们

0898-88881688

在线咨询: QQ交谈

邮箱: email@wangzhan.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部