亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無法理解 go test -race : RACE: DATA WARNING 堆棧跟蹤

無法理解 go test -race : RACE: DATA WARNING 堆棧跟蹤

Go
元芳怎么了 2023-06-12 12:47:15
我在測試我的項目時遇到了 DATA RACE 警告,想知道是否有人愿意幫助我破譯這個問題。我過去從未嘗試過測試 go 例程,我發現很難全神貫注于數據競爭。我在未解決問題的描述中提供了一個鏈接,并在問題描述中提供了跟蹤。我真的很感激一些幫助,只是從學習調試類似問題和為將來的 go 例程編寫更好的測試方面。https://github.com/nitishm/vegeta-server/issues/52下面還提供了跟蹤的片段=== RUN   Test_dispatcher_Cancel_Error_completedINFO[0000] creating new dispatcher                       component=dispatcherINFO[0000] starting dispatcher                           component=dispatcherINFO[0000] dispatching new attack                        ID=d63a79ac-6f51-486e-845d-077c8c76168a Status=scheduled component=dispatcher==================WARNING: DATA RACERead at 0x00c0000f8d68 by goroutine 8:  vegeta-server/internal/dispatcher.(*task).Complete()      /Users/nitishm/vegeta-server/internal/dispatcher/task.go:116 +0x61  vegeta-server/internal/dispatcher.run()      /Users/nitishm/vegeta-server/internal/dispatcher/task.go:213 +0x17aPrevious write at 0x00c0000f8d68 by goroutine 7:  vegeta-server/internal/dispatcher.(*task).Run()      /Users/nitishm/vegeta-server/internal/dispatcher/task.go:107 +0x12a  vegeta-server/internal/dispatcher.(*dispatcher).Run()      /Users/nitishm/vegeta-server/internal/dispatcher/dispatcher.go:109 +0xb5fGoroutine 8 (running) created at:  vegeta-server/internal/dispatcher.(*task).Run()      /Users/nitishm/vegeta-server/internal/dispatcher/task.go:105 +0x11c  vegeta-server/internal/dispatcher.(*dispatcher).Run()      /Users/nitishm/vegeta-server/internal/dispatcher/dispatcher.go:109 +0xb5fGoroutine 7 (running) created at:  vegeta-server/internal/dispatcher.Test_dispatcher_Cancel_Error_completed()      /Users/nitishm/vegeta-server/internal/dispatcher/dispatcher_test.go:249 +0x545  testing.tRunner()      /usr/local/go/src/testing/testing.go:827 +0x162
查看完整描述

1 回答

?
交互式愛情

TA貢獻1712條經驗 獲得超3個贊

據我所知:

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

意味著 goroutines87正在讀取和寫入相同的位置。如果您查看錯誤指向的行:

goroutine 8116

if?t.status?!=?models.AttackResponseStatusRunning?{

goroutine 7107

t.status?=?models.AttackResponseStatusRunning

您可以看到 goroutinestask在沒有任何同步的情況下訪問 的狀態,正如您已經知道的那樣,這可能會導致競爭條件。

因此,如果您的程序允許多個 goroutine 訪問單個任務,您需要確保不會發生數據競爭,例如使用互斥鎖。


查看完整回答
反對 回復 2023-06-12
  • 1 回答
  • 0 關注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號