Гонка записи состояния #1

Закрыто
открыт 2020-01-27 05:42:55 +00:00 пользователем vporoshok · 4 комментариев
vporoshok оставлен комментарий 2020-01-27 05:42:55 +00:00 (Перенесено из github.com)

Всё хорошо, но при запуске с детектором гонки получается следующий вывод:

echo -e 'https://golang.org\nhttps://godoc.org\nhttps://golang.org\nhttps://golang.org\nhttps://golang.org\nhttps://godoc.org\nhttps://godoc.org' | go run -race main.go
2020/01/27 09:39:36 run goroutine
2020/01/27 09:39:36 run goroutine
2020/01/27 09:39:36 run goroutine
2020/01/27 09:39:36 run goroutine
2020/01/27 09:39:36 run goroutine
Count for https://golang.org: 20
==================
WARNING: DATA RACE
Read at 0x00c0000aa110 by goroutine 20:
  github.com/romkagolovadvayha/go-finder/finder.(*Finder).Start.func1()
      /home/vp/go/src/github.com/romkagolovadvayha/go-finder/finder/finder.go:48 +0x112

Previous write at 0x00c0000aa110 by goroutine 7:
  github.com/romkagolovadvayha/go-finder/finder.(*Finder).Start.func1()
      /home/vp/go/src/github.com/romkagolovadvayha/go-finder/finder/finder.go:48 +0x136

Goroutine 20 (running) created at:
  github.com/romkagolovadvayha/go-finder/finder.(*Finder).Start()
      /home/vp/go/src/github.com/romkagolovadvayha/go-finder/finder/finder.go:43 +0x12c
  main.main()
      /home/vp/go/src/github.com/romkagolovadvayha/go-finder/main.go:18 +0x25f

Goroutine 7 (running) created at:
  github.com/romkagolovadvayha/go-finder/finder.(*Finder).Start()
      /home/vp/go/src/github.com/romkagolovadvayha/go-finder/finder/finder.go:43 +0x12c
  main.main()
      /home/vp/go/src/github.com/romkagolovadvayha/go-finder/main.go:18 +0x25f
==================
Count for https://golang.org: 20
Count for https://golang.org: 20
Count for https://godoc.org: 15
Count for https://godoc.org: 15
Count for https://golang.org: 20
Count for https://godoc.org: 15
Total: 125
Found 1 data race(s)
exit status 66

Почему? И как это исправить?

Всё хорошо, но при запуске с детектором гонки получается следующий вывод: ``` echo -e 'https://golang.org\nhttps://godoc.org\nhttps://golang.org\nhttps://golang.org\nhttps://golang.org\nhttps://godoc.org\nhttps://godoc.org' | go run -race main.go 2020/01/27 09:39:36 run goroutine 2020/01/27 09:39:36 run goroutine 2020/01/27 09:39:36 run goroutine 2020/01/27 09:39:36 run goroutine 2020/01/27 09:39:36 run goroutine Count for https://golang.org: 20 ================== WARNING: DATA RACE Read at 0x00c0000aa110 by goroutine 20: github.com/romkagolovadvayha/go-finder/finder.(*Finder).Start.func1() /home/vp/go/src/github.com/romkagolovadvayha/go-finder/finder/finder.go:48 +0x112 Previous write at 0x00c0000aa110 by goroutine 7: github.com/romkagolovadvayha/go-finder/finder.(*Finder).Start.func1() /home/vp/go/src/github.com/romkagolovadvayha/go-finder/finder/finder.go:48 +0x136 Goroutine 20 (running) created at: github.com/romkagolovadvayha/go-finder/finder.(*Finder).Start() /home/vp/go/src/github.com/romkagolovadvayha/go-finder/finder/finder.go:43 +0x12c main.main() /home/vp/go/src/github.com/romkagolovadvayha/go-finder/main.go:18 +0x25f Goroutine 7 (running) created at: github.com/romkagolovadvayha/go-finder/finder.(*Finder).Start() /home/vp/go/src/github.com/romkagolovadvayha/go-finder/finder/finder.go:43 +0x12c main.main() /home/vp/go/src/github.com/romkagolovadvayha/go-finder/main.go:18 +0x25f ================== Count for https://golang.org: 20 Count for https://golang.org: 20 Count for https://godoc.org: 15 Count for https://godoc.org: 15 Count for https://golang.org: 20 Count for https://godoc.org: 15 Total: 125 Found 1 data race(s) exit status 66 ``` Почему? И как это исправить?
romkagolovadvayha оставлен комментарий 2020-01-27 07:07:10 +00:00 (Перенесено из github.com)

это происходит из-за одновременного доступа к ресурсам, исправил с помощью мьютекса.

ссылка на ревизию github.com/romkagolovadvayha/go-finder@3b969ddf1d github.com/romkagolovadvayha/go-finder@3c210d4303

это происходит из-за одновременного доступа к ресурсам, исправил с помощью мьютекса. ссылка на ревизию https://github.com/romkagolovadvayha/go-finder/commit/3b969ddf1da5f2fbd490cc891265fa9262de157f https://github.com/romkagolovadvayha/go-finder/commit/3c210d43033395f8930c1cf73bf1ff79cacddbdf
vporoshok оставлен комментарий 2020-01-27 08:02:56 +00:00 (Перенесено из github.com)

ещё один нюанс. Теперь обработка текста происходит в одном потоке

ещё один нюанс. Теперь обработка текста происходит в одном потоке
romkagolovadvayha оставлен комментарий 2020-01-27 08:45:17 +00:00 (Перенесено из github.com)

с начало я решил сделать так github.com/romkagolovadvayha/go-finder@a7f3f31eef
но потом откатил и поправил одну строчку github.com/romkagolovadvayha/go-finder@6e608e20b7

с начало я решил сделать так https://github.com/romkagolovadvayha/go-finder/commit/a7f3f31eefa90783a1c7568e7dcdf9dd5429d5e5 но потом откатил и поправил одну строчку https://github.com/romkagolovadvayha/go-finder/commit/6e608e20b7a6b426fab668f15ca5e5b4e9aec4f2
vporoshok оставлен комментарий 2020-01-27 08:47:02 +00:00 (Перенесено из github.com)

Отлично!

Отлично!
Войдите, чтобы присоединиться к обсуждению.
Нет этапа
Нет проекта
Нет назначенных
1 участник
Уведомления
Срок выполнения
Срок выполнения недействителен или находится за пределами допустимого диапазона. Пожалуйста, используйте формат «гггг-мм-дд».

Срок выполнения не установлен.

Зависимости

Зависимостей нет.

Ссылка
romkagolovadvayha/go-finder#1
Описание отсутствует.