MST
星途 面试题库

面试题:Go语言中如何检测并发中的数据竞争

在Go语言的并发编程场景下,描述一下如何利用工具检测代码中可能存在的数据竞争问题,并举例说明简单的并发代码示例以及如何使用该工具进行检测。
35.8万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 检测工具:Go语言提供了go tool race工具来检测数据竞争问题。
  2. 并发代码示例
package main

import (
    "fmt"
    "sync"
)

var counter int

func increment(wg *sync.WaitGroup) {
    defer wg.Done()
    counter++
}

func main() {
    var wg sync.WaitGroup
    for i := 0; i < 10; i++ {
        wg.Add(1)
        go increment(&wg)
    }
    wg.Wait()
    fmt.Println("Final counter value:", counter)
}
  1. 使用工具检测: 在命令行中进入包含上述代码的目录,执行以下命令:
go build -race
./<可执行文件名>

如果存在数据竞争,go tool race会输出详细的信息,指出竞争发生的位置等。在上述示例中,counter++这一行会引发数据竞争,因为多个goroutine同时访问和修改counter。通过go tool race可以检测到这个问题。