Open crgimenes opened 7 years ago
disclaimer .. apenas dei uma lida no código para tentar dar uma ajuda aqui.
Um possível problema que pode acontecer é o wait() terminar antes dessa go routine terminar. Como vocês passam um apontador para a variável r, na próxima iteração esse ponteiro pode ser modificado, causando algum tipo de corrupção.
Em resumo, talvez o fix para essa race condition seja tão simples tão simples quanto passar a variável r por valor aqui. Claro que envolve uma mudança na função InsertSped.
Nesse caso não tem como acontecer porque o decremento da variável id acontece no fim da InsertSped, o problema de data race eu explico como corrigir aqui: http://crg.eti.br/post/go-previnindo-data-race/ achei que o @chapzin tinha feito no sistema dele também.
Opa @crgimenes, obrigado pela explicação. Entendi sim e parabéns pelo post!
Realmente a quantidade de ferramentas desse tipo em go é bem grande. Só acrescentando um pouca, outra forma de atingir o mesmo objetivo (com performance similar) do exemplo do post é usando o pacote sync/atomic.
Possível race condition no SpedRead.go
https://github.com/chapzin/parse-efd-fiscal/blob/master/SpedRead/SpedRead.go#L57 Precisamos ver a melhor forma de limitar goroutines, da forma que estamos fazendo hoje pode causar uma race condition, poderíamos simplesmente usar mutex e resolver esse caso rapidamente mas também podemos reescrever esse limitador usando canais.