So mixing atomic read/write of one variable makes non-atomic read/writes of
another variable safe as well? As far as the memory model goes? Caveat
being that it's not formalized.

I am sure great care is needed when attempting such code regardless...

On Wed, Oct 12, 2016, 16:04 <hiatt.dus...@gmail.com> wrote:

> I think what Russ is saying there is don't do
>
> // routine 1
> x = 5
>
> // routine 2
> atomic.LoadInt32(&x)
>
> That's mixing atomic operations on the same word.  In the case of a spin
> lock to coordinate threads, Dmitriy's comment 15 is illustrative:
>
> 1.
>
> // goroutine 1
> data = 42
> atomic.Store(&ready, 1)
>
> // goroutine 2
> if atomic.Load(&ready) {
>   if data != 42 {
>     panic("broken")
>   }
> }
>
>
> I'm pretty sure the above case works in go without panicking and there is
> causal ordering here.  The only reason I hesitate to go further is because
> that isn't formalized as part of the spec I don't believe, hence the issue.
>
>
> On Wednesday, October 12, 2016 at 6:16:00 AM UTC-5, Henrik Johansson wrote:
>
> I am sorry if I am dense but what Russ said in that thread "and that you
> shouldn't mix atomic and non-atomic accesses for a given memory word" seems
> to indicate otherwise.
>
> I am not going to use spin locks left and right but just understand the
> workings and adjust my expectations accordingly.
>
> ons 12 okt. 2016 kl 10:16 skrev John Souvestre <jo...@souvestre.com>:
>
> I looked at pi/goal.  It uses a sync/atomic CAS.  Thus, yes, it provides a
> memory barrier.
>
>
>
> As someone else already recommended, the call to Gosched() for each loop
> will probably tie up the runtime quite a bit.  It would probably be better
> to drop it entirely (if the spin isn’t going to last long, worst case) or
> only do it every so often (perhaps 1,000 or more loops).
>
>
>
> Depending on the amount of congestion and what your latency goal is, you
> might find that a regular sync/Mutex does as well or better.  The fast path
> (when there’s little congestion) isn’t much more than a CAS.
>
>
>
> John
>
>     John Souvestre - New Orleans LA
>
>
>
> *From:* Henrik Johansson [mailto:dahan...@gmail.com]
>
> *Sent:* 2016 October 12, Wed 03:02
> *To:* John Souvestre; golang-nuts
>
>
> *Subject:* Re: [go-nuts] Re: Go locking and channels much slower than
> Java equivalent, program spends most of time in sync.(*Mutex).Lock() and
> sync.(*Mutex).Unlock()
>
>
>
> Sure that's my question. Does a SpinLock as given in several examples
> above provide the same semantics as a proper mutex?
>
>
>
> On Wed, Oct 12, 2016, 09:50 John Souvestre <jo...@souvestre.com> wrote:
>
> Ø  … state that one measly atomic load has the same memory effects as a
> sync/lock which seems like it might work on some platforms (maybe) but
> surely not for all?
>
>
>
> I believe that any of the atomic operations in sync/atomic is a memory
> barrier, just as a mutex is, and this is for all platforms.
>
>
>
> Ø  Don't I at least have to load the shared vars using atomic load
> (atomic.Value for example) or something similar?
>
>
>
> Not if everyone accessing them is using a mutex to synchronize the access.
>
>
>
> John
>
>     John Souvestre - New Orleans LA
>
>
>
> *From:* golan...@googlegroups.com [mailto:golan...@googlegroups.com] *On
> Behalf Of *Henrik Johansson
>
>
> *Sent:* 2016 October 12, Wed 00:02
>
> *To:* hiatt....@gmail.com; golang-nuts
>
>
> *Subject:* Re: [go-nuts] Re: Go locking and channels much slower than
> Java equivalent, program spends most of time in sync.(*Mutex).Lock() and
> sync.(*Mutex).Unlock()
>
>
>
> Yes I get that but it seems as there other constraints at play here wrt
> the memory model.
>
>
>
> In essence the spin locks (unless described outside their code somewhere)
> state that one measly atomic load has the same memory effects as a
> sync/lock which seems like it might work on some platforms (maybe) but
> surely not for all?
>
>
>
> Don't I at least have to load the shared vars using atomic load
> (atomic.Value for example) or something similar?
>
>
>
> My point is that the protected section isn't guaranteed the same memory
> rules as when protected by a standard lock.
>
>
>
> --
> 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...@googlegroups.com.
>
>
> For more options, visit https://groups.google.com/d/optout.
>
> --
> 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...@googlegroups.com.
>
>
> For more options, visit https://groups.google.com/d/optout.
>
> --
> 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.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to