The stress test for my app fails frequently with what looks like a collision in atomic.AddUint64() results, so I wondered whether I had misunderstood atomic-add.
So far I can't reproduce it with a small program, so I've probably misunderstood my app :-) On Friday, November 29, 2019 at 6:41:39 PM UTC-8, Kurtis Rader wrote: > > On Fri, Nov 29, 2019 at 6:21 PM Liam <networ...@gmail.com <javascript:>> > wrote: > >> Does atomic.AddInt32(&x, 1) always yield unique values for concurrent >> callers? >> >> I'm guessing not, because (I think) I'm seeing that two callers get x+2, >> neither gets x+1. >> > > That shouldn't happen, AFAICT. Can you share the code where the incorrect > behavior is occurring? Or, preferably, a simple reproducer program? > > >> Is there a way to generate unique values with pkg atomic, or is a mutex >> required? >> > > Keep in mind that atomic.AddInt32() has the usual two's-complement > overflow semantics. If all you want is a generation counter you really > should be using a uint32 and atomic.AddUint32(). Also, depending on your > preferences and performance considerations you might find it preferable to > use a channel that holds a single int, or small number of ints, that is fed > by a producer goroutine and consumed by any context needing a uniq ID. That > makes it easier to abstract the generation of "unique" ints so that they > satisfy other constraints (e.g., they must be even, odd, prime, etc.). > > -- > Kurtis Rader > Caretaker of the exceptional canines Junior and Hank > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/4f62dfff-6895-4aaa-9f0d-b635d5ba7ea7%40googlegroups.com.