You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
The text was updated successfully, but these errors were encountered: