繁体   English   中英

避免使用Golang做数据竞赛工作者

[英]Avoid data race worker with golang

我有一个应处理工作的jobWorker,在这个工作人员中,数据库具有读写,日志文件,接收api和一些数据计算的功能。

var mystruct strcut{}

func worker(v) {
   Get data from database
   ...
   Update database status
   ...
   useByWorker()
   ...
   Do some computing
   ...
   Receive API
   ...
   Write log file
}

func useByWorker() {
    mystruct = {1,2,3}
}

这是我上班的主要功能。

func main() {
    var wg sync.WaitGroup
    data := [][]string{}
    wg.Add(1)
    for k,v := range data {
        k := k
        v := v
        go func(k int, v []string) {
            fmt.Println(k,v)
            worker(v)
            wg.Done()
        }(k, v)
    }

    wg.Wait()
}

数据争用问题让日志和我在工作程序中使用的数据混淆了。 任何方法都可以简单地解决数据争用问题而无需锁定(Mutex.Lock)。 我希望工作可以更快地由工人处理。

任何建议或提示将有所帮助。 谢谢。

如果要对文件进行非阻塞写访问,则可以使用一个goroutine按通道写入文件传递消息。 通过使用通道缓冲可以避免块,或者可以使用标准记录器 它可以与多个goroutines一起使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM