Size: a a a

2020 May 10

R

Roo in Go-go!
Окей спасибо
источник

zl

ziggy lucid in Go-go!
как сделать atomic декремент для uint64?
источник

AE

Alexander Emelin in Go-go!
привет, а есть у кого-нибудь опыт замены Redis на Nats для PUB/SUB (интересует именно чистый PUB/SUB без streaming возможностей)?
источник

ВС

Владимир Столяров... in Go-go!
atomic.AddUint64(&n, -1)
источник

zl

ziggy lucid in Go-go!
Владимир Столяров
atomic.AddUint64(&n, -1)
второй параметр тоже должен быть uint64
источник

ВС

Владимир Столяров... in Go-go!
Точно... Интересно, а просто скастовать не прокатит?
источник

AS

Alexandr Sokolov in Go-go!
ziggy lucid
второй параметр тоже должен быть uint64
-1 это значение, оно не привязано к типу. Компилятор сам разберется
источник

AS

Alexandr Sokolov in Go-go!
А, там uint
источник

zl

ziggy lucid in Go-go!
Владимир Столяров
Точно... Интересно, а просто скастовать не прокатит?
так в том и дело, что можно только плюсануть
источник

AS

Alexandr Sokolov in Go-go!
Тогда есть такой ход

val := atomic.LoadUint64(vPtr)
for !atomic.CompareAndSwapUint64(vPtr, val, val - 1) {
   val = atomic.LoadUint64(vPtr)
}
источник

zl

ziggy lucid in Go-go!
а если сначала считать, декрементировать, а потом обратно записать, то это уже не atomic никакой
источник

AS

Alexandr Sokolov in Go-go!
Вы не правы
источник

AS

Alexandr Sokolov in Go-go!
Прочитайте весь код.
Вы считываете значение, и атомарно заменяете только если оно до сих пор равно одилаемому
источник

zl

ziggy lucid in Go-go!
почему? пока я буду вычитать, кто-то другой сто раз туда запишет что угодно
источник

DP

Daniel Podolsky in Go-go!
там же swap
источник

ВС

Владимир Столяров... in Go-go!
ziggy lucid
так в том и дело, что можно только плюсануть
источник

ВС

Владимир Столяров... in Go-go!
Правда не помню, это законно или нет)
источник

AS

Alexandr Sokolov in Go-go!
ziggy lucid
почему? пока я буду вычитать, кто-то другой сто раз туда запишет что угодно
Логика такая:

* Считали в val
* val == значению в vPtr? Если да, то положи туда val - 1
* Если нет, то обнови значение в val

Каждый пункт атомарен
источник

ВС

Владимир Столяров... in Go-go!
Но в целом-то операция не атомарная выходит
источник

zl

ziggy lucid in Go-go!
спс, только что вспомнил, что в fasthttp недавно такое же видел
источник