romesses
@romesses
бэкенд

Почему этот код ведет себя по-разному при множественных запусках?

https://play.golang.org/p/AhFXtRGcVba

Порой получаю такое:
output

!! scanLogLines
SCAN: Emitter A 1
SCAN: Emitter A 2
SCAN: Emitter A 3
SCAN: Emitter A 4
SCAN: Emitter A 5
>> log SEND - [Emitter A 1 Emitter A 2 Emitter A 3 Emitter A 4 Emitter A 5]
SCAN: Emitter A 6
SCAN: Emitter A 7

<< log RCV  - [Emitter A 6 Emitter A 7 Emitter A 3 Emitter A 4 Emitter A 5]
SCAN: Emitter A 8
SCAN: Emitter A 9
SCAN: Emitter A 10
>> log SEND - [Emitter A 6 Emitter A 7 Emitter A 8 Emitter A 9 Emitter A 10]
SCAN: Emitter A 11
SCAN: Emitter A 12

<< log RCV  - [Emitter A 6 Emitter A 7 Emitter A 8 Emitter A 9 Emitter A 10]
SCAN: 1=========================
>> log SEND - [Emitter A 11 Emitter A 12 1=========================]
!! /scanLogLines

<< log RCV  - [Emitter A 11 Emitter A 12 1=========================]


По идее, "log RCV" должен дублировать "log SEND"

Примечательно, что в Go Playground работает как надо, пока не заменить delay на 0 нс.
  • Вопрос задан
  • 91 просмотр
Решения вопроса 1
tumbler
@tumbler
бекенд-разработчик на python
slice содержит внутри указатель, что приводит к гонкам при параллельной обработке слайса в разных горутинах
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы