Thanks. So I take it this must be handled by the compiler when generating
assembly.
I have peeked in the src/cmd/compile/ directory , assuming it is hidden
there, but that's a rabbit hole I do want to go in just yet.
What I am really looking for is knowing which instructions lead to
memory-synchronisation. I assume there are 'Synchronisation primitives'
which have this property and therefore other primitives have not.
E.g. A co-worker pointed out that you can avoid sync.Mutex by using this
construct:
if !atomic.CompareAndSwapInt32(&s.myLock, 0, 1) {
fmt.Println("locked")
return
}
defer atomic.StoreInt32(&s.myLock, 0)
processData()
Would this synchronise memory?
On Monday, June 15, 2020 at 6:42:16 PM UTC+2 [email protected] wrote:
> On Mon, Jun 15, 2020 at 10:30 AM Leo Baltus <[email protected]> wrote:
> >
> > from gopl chapter 9.4 'Memory synchronisation’
> >
> > Synchronization primitives like channel communications and mutex
> operations cause the processor to flush out and commit all its accumulated
> writes so that the effects of goroutine execution up to that point are
> guaranteed to be visible to goroutines running on other processors.
> >
> > I would like to better understand how this works. What is it that makes
> this ‘flush out’ to happen? Is this a system call?
>
> It is usually done with a memory barrier:
>
> https://en.wikipedia.org/wiki/Memory_barrier
>
>
> >
> > —
> > Leo
> >
> >
> >
> > --
> > 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 [email protected].
> > To view this discussion on the web visit
> https://groups.google.com/d/msgid/golang-nuts/F663D146-9F4C-48BB-918A-E58D554B9B18%40npo.nl
> .
>
--
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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/golang-nuts/18a4052a-4683-46f8-96c7-cda92a34a875n%40googlegroups.com.