问题标签 [waitgroup]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
118 浏览

go - 理解 goroutines 同步

我正在尝试了解 golang频道同步当我使用竞赛检测器运行我的程序时,它会导致竞赛检测。

我的程序:

种族检测器报告:

我无法弄清楚这里出了什么问题。

我的分析:

  1. wg.Add(1)正在递增计数器
  2. wg.Done()在减少计数器的 goroutine 结束时调用
  3. ch <- x这应该是一个阻塞调用,因为它是非缓冲通道
  4. 循环应该迭代直到完成通道有一些消息发生在waitgroup计数器变为零时,即所有 5 个 goroutine 都发布了消息
  5. 一旦计数器变为零,wggoroutine 将恢复并调用 done,一旦消息在主循环中被消耗,它会中断循环并应该优雅地退出。
0 投票
1 回答
181 浏览

go - WaitGroup - 致命错误:所有 goroutine 都处于睡眠状态 - 死锁

有人可以解释为什么这段代码会引发“致命错误:所有 goroutines 都在休眠 - 死锁!”?

我似乎无法找到问题所在。我已经看到一些关于这个特定错误的问题,但原因主要是循环通过一个通道而不关闭它。谢谢!

0 投票
2 回答
271 浏览

go - 如何在没有死锁的情况下并行执行多个 goroutine

所以我一直在尝试使用 WaitGroup 并行运行多个 goroutine。无论我尝试什么,我总是以“致命错误:所有 goroutine 都处于睡眠状态 - 死锁!”而告终。

这就是我的代码现在的样子:

然而,这会导致死锁,我不知道为什么。

我一直在尝试使用以下代码读取 WaitGroup 之后的值:

然而,它似乎甚至不会到达这部分。

谢谢!

0 投票
2 回答
228 浏览

go - goroutine 启动前的 sync.WaitGroup 初始化

我有以下代码作为测试的一部分:

令我惊讶的是,我panic: Fail in goroutine after TestReadWrite has completed在运行“go test”时得到了。当使用“go test -race”运行时,我并没有感到恐慌,但后来测试失败了。在这两种情况下,尽管有 wg.Wait(),goroutine 都没有完成执行。

我进行了以下更改,现在测试按预期工作:

我的疑问是:

  1. 到目前为止,我看到的很多代码都wg.Add(1)在 goroutine 中。为什么在这种特定情况下会出现意外行为?这里似乎发生的是,一些 goroutine 似乎已经完成运行,并且在其他 goroutine 开始运行之前就通过了 wg.Wait()。在 goroutine 中使用 wg.Add(1) 是否危险/要避免?如果这通常不是问题,那么究竟是什么导致了这里的问题?
  2. 是否添加wg.Add(expected)了解决此问题的正确方法?
0 投票
0 回答
32 浏览

go - 结果在 TDengine go 连接器的协程使用中不匹配

问题发生在 Windows 上,使用 Go 1.5,win 分支上的 driver-go,taos 2.1.0.0。

对于一个简单的用例:

结果与 sqls 随机不匹配 - 这意味着 sql B 结果具有使用 sql A 选择的结果。

0 投票
4 回答
136 浏览

go - 在不使用 wg.Wait() 的情况下检查所有 goroutine 是否已完成

假设我有一个函数IsAPrimaryColour(),它通过调用其他三个函数IsRed()IsGreen()IsBlue() 来工作。由于这三个功能彼此完全独立,因此它们可以同时运行。退货条件为:

  1. 如果三个函数中的任何一个返回 true,IsAPrimaryColour() 也应该返回 true。无需等待其他功能完成。即:IsPrimaryColour()如果IsRed()IsGreen()IsBlue(),则为
  2. 如果所有函数都返回 false,IsAPrimaryColour() 也应该返回 false。即:如果IsRed()IsGreen ()为且IsBlue ( )假,则IsPrimaryColour()
  3. 如果三个函数中的任何一个返回错误,IsAPrimaryColour() 也应该返回错误。无需等待其他功能完成或收集任何其他错误。

我正在努力解决的问题是,如果任何其他三个函数返回 true,如何退出该函数,但如果它们都返回 false,则还要等待所有三个函数都完成。如果我使用 sync.WaitGroup 对象,我需要等待所有 3 个 go 例程完成,然后才能从调用函数返回。

因此,我使用循环计数器来跟踪我在频道上收到消息的次数以及在收到所有 3 条消息后存在的程序。

https://play.golang.org/p/kNfqWVq4Wix

虽然这工作得很好,但我想知道我是否没有忽略一些语言功能以更好地做到这一点?

0 投票
2 回答
385 浏览

go - 如何获取与 WaitGroup 关联的 goroutine 的数量?

假设我使用 aWaitGroup让应用程序的主线程等待,直到我从所述 main 启动的所有 goroutine 都完成。

是否有一种安全、直接的方法可以随时评估有多少与 say 相关的 goroutineWaitGroup仍在运行?

0 投票
1 回答
68 浏览

go - 如何在管道中使用 sync.WaitGroup

我正在尝试在 Go 中实现管道,并且存在程序在其余 goroutine 完成之前退出主 goroutine 的问题。

使用等待组帮助解决此问题。

当我在这种情况下使用 time.Sleep 时,程序成功运行。

0 投票
1 回答
134 浏览

go - 固定数量工人模式的竞争条件

我正在玩一些代码以用于学习目的,并且在使用-race标志时我得到了执行的竞争条件,我想了解原因。代码启动了一组固定的 goroutines,这些 goroutines 充当工作人员从通道消费任务,没有固定数量的任务,只要通道接收工作人员必须继续工作的任务。

调用WaitGroup函数时出现竞争条件。据我了解(查看数据竞争报告),当第一次wg.Add调用由一个衍生的 goroutine 和主例程调用wg.Wait同时执行时,就会发生竞争条件。那是对的吗?如果是,这意味着我必须始终在主例程上执行对 Add 的调用以避免这种资源竞争?但是,这也意味着我需要知道工作人员需要提前处理多少任务,如果我需要代码处理工作人员运行后可能出现的任何数量的任务,这会很糟糕......

编码:

那个报告:

0 投票
0 回答
66 浏览

go - 需要帮助同步:WaitGroup

我需要您的帮助,这是一段发出请求的代码https://play.golang.org/p/1_FOY8BTZND,每个请求都有自己的延迟 1 个请求正在等待第二个完成,即 wg .Done(),返回:

如何让第一个请求不等待第二个,而是线性执行,只等待其组完成,返回: