Избегайте гонок данных с Голангом

У меня есть 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}
}

Вот моя основная функция для запуска go-worker.

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). Я хочу, чтобы рабочие могли работать быстрее.

Любые предложения или советы помогут. Благодарю.

1 ответ

Если вы хотите неблокируемый доступ для записи в файл, вы можете использовать одну процедуру для записи в файл, передавая сообщения по каналу. Блоки можно избежать с помощью буферизации каналов или вы можете использовать стандартный регистратор. Может работать с несколькими программами.

Другие вопросы по тегам