无法理解go test -race:RACE:数据警告堆栈跟踪

时间:2019-02-24 14:44:18

标签: go testing race-condition goroutine data-race

在测试我的项目时,我遇到了DATA RACE警告,想知道是否有人愿意帮助我解决问题。过去,我从未尝试过测试go例程,但发现很难在数据争用上全神贯注。

我在说明中提供了指向未解决问题的链接,并在问题说明中提供了跟踪信息。

从学习调试类似问题并为以后的go例程编写更好的测试方面,我将非常感谢您的帮助。

https://github.com/nitishm/vegeta-server/issues/52

下面也提供了跟踪的片段

for()

1 个答案:

答案 0 :(得分:1)

据我了解:

Read at 0x00c0000f8d68 by goroutine 8:Previous write at 0x00c0000f8d68 by goroutine 7

表示goroutines 87都在同一位置读取和写入。如果您查看错误所指向的行:

goroutine 8 on 116

if t.status != models.AttackResponseStatusRunning {

goroutine 7 on 107

t.status = models.AttackResponseStatusRunning

您可以看到,goroutine正在访问task的状态而没有任何同步,并且您已经知道,这可能会导致竞争状态。

因此,如果您的程序允许多个goroutine访问单个任务,则需要确保通过使用互斥锁来避免数据争用。