When programming with threads you have to respect the language memory model 
to have a chance of creating correct code. I don't get what point you are 
trying for here.

If your goal is to learn then maybe read up on memory models and compiler 
optimisations. The people on SO might have a point ;-)

On Monday, 1 July 2019 17:05:47 UTC+1, w jp wrote:
>
> I'm not sure if this post fits here coz it's more about concurrency. I'm 
> trying to reasoning if I could get by without atomic or other synchronization 
> in this case.
>
> So I have two go routines:
>
> var sequence int64
>
> // writer
> for i := sequence; i < max; i++ {
>   doSomethingWithSequence(i)
>   sequence = i
> }
>
> // reader
> for {
>   doSomeOtherThingWithSequence(sequence)
> }
>
> And here're some potential risks I can think of:
>
>
>    1. 
>    
>    reordering (for the writer, updating sequence happens before 
>    doSomething) could happen, *but I can live with that.*
>    2. 
>    
>    sequence is not properly aligned in memory so the reader might observe 
>    a partially updated sequence. Running on (recent kernel) linux with 
>    x86_64, can we rule that out?
>    3. 
>    
>    go compiler 'cleverly optimizes' the reader, so the access to i never 
>    goes to memory but 'stayed' in a register. Is that possible in go?
>    4. 
>    
>    Anything else?
>    
> PS: I posted same thing on SO but people seem to be more focused on 
> educating me about not going there, but that's really not my point. 
>

-- 
You received this message because you are subscribed to the Google Groups 
"mechanical-sympathy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web, visit 
https://groups.google.com/d/msgid/mechanical-sympathy/31e1ab4e-8581-45e9-9419-6f7f80c41281%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to