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.

Reply via email to