Size: a a a

2020 April 23

а

а кто это in Go-go!
Andrey Enshin
тут подход sharing memory by communicating 🙂
кажется, синхронизировать нечего: на каждый аккаунт своя горутина, к аккаунту имеет доступ только она, с ней общаются через каналы
рейс детектор возвращает четыре стека
где последний раз читали
где последний раз писали
где запущены эти горутины
посмотрите, можно там есть ответ
источник

C

Calculon in Go-go!
а кто это
ну там могут быть методы которые пишут в канал например
ну вот мы щас будем сидеть гадать что у него там
источник

а

а кто это in Go-go!
Calculon
ну вот мы щас будем сидеть гадать что у него там
а что еще делать
источник

C

Calculon in Go-go!
а кто это
а что еще делать
отдыхать, пить чай
источник

AE

Andrey Enshin in Go-go!
ага, методы есть
вот, например, тот на котором рейс детектится
https://play.golang.org/p/MSw6ocGLNHC
источник

ЛА

Локоть Анатолий... in Go-go!
В данном коде я не вижу рейс, но если вы затестите -race, то в выдаче будут ссылки на код, которые рейс делают.
источник

ЛА

Локоть Анатолий... in Go-go!
Andrey Enshin
ага, методы есть
вот, например, тот на котором рейс детектится
https://play.golang.org/p/MSw6ocGLNHC
Если есть хоть какой-то другой код, который читает или меняет a,
Кроме горутины из предыдущего фрагмента, то это рейс
источник

ЛА

Локоть Анатолий... in Go-go!
*одновременно
источник

AE

Andrey Enshin in Go-go!
в выдаче -race
запись тут a.closed = true , в методе Open

чтение почему-то говорит на простом вызове a.Close()
источник

а

а кто это in Go-go!
Andrey Enshin
в выдаче -race
запись тут a.closed = true , в методе Open

чтение почему-то говорит на простом вызове a.Close()
простой вызов видимо читает без синхронизации с пишущим open
источник

AE

Andrey Enshin in Go-go!
код Close() прост, он только шлёт в канал
https://play.golang.org/p/MSw6ocGLNHC

а никто не редактирует
источник

ЛА

Локоть Анатолий... in Go-go!
Andrey Enshin
код Close() прост, он только шлёт в канал
https://play.golang.org/p/MSw6ocGLNHC

а никто не редактирует
Так он читает а, этого достаточно
источник

ЛА

Локоть Анатолий... in Go-go!
А второй вызов какой? Для рейса надо двух
источник

AE

Andrey Enshin in Go-go!
второй - запись, она происходит в коде, который определён в Open():
a.closed = true
https://play.golang.org/p/M1RnxebTlYY


т.е. строка a.operation <- cls считается чтением a по тому же адресу что и запись a.closed = true?
источник

C

Calculon in Go-go!
Блин тебе бы не помешало почитать про мьютексы, атомики, каналы
источник

C

Calculon in Go-go!
Зачем это ваще над
источник

C

Calculon in Go-go!
Это типо основная фича языка как никак
источник

C

Calculon in Go-go!
Хайповый конкуренси
источник

ЛА

Локоть Анатолий... in Go-go!
Andrey Enshin
второй - запись, она происходит в коде, который определён в Open():
a.closed = true
https://play.golang.org/p/M1RnxebTlYY


т.е. строка a.operation <- cls считается чтением a по тому же адресу что и запись a.closed = true?
Если есть любая переменная, общая между двумя горутинами, (или между 1 горутиной и основным потоком), то любая операция, не меняющая переменную, но использующая ее - чтение, любое изменение - запись
источник

AE

Andrey Enshin in Go-go!
@Calculon666 , всё верно
каналы - это основная фича языка

с мьютексами это можно, думаю, сделать проще
вдохновлялся этим:
https://gobyexample.com/mutexes vs https://gobyexample.com/stateful-goroutines
источник