On Sun, Aug 14, 2016 at 2:49 PM, Nigel Tao <nigel...@golang.org> wrote: > On Aug 15, 2016 05:21, "Ian Lance Taylor" <i...@golang.org> wrote: >> If these approaches seem awkward, I suppose you could get >> syscall(syscall.GETCPU, ...) when you want to increment a counter. > > That still seems racy: > > n := syscall(syscall.GETCPU, ...) > // The goroutine could be re-scheduled here to another CPU, between these > two lines, so n is out of date. > array[n]++ // read/writes wrong n, non-atomically.
Yes, you do need to use an atomic add. But the point is that in the normal case that particular memory location will only be accessed from a single CPU, and as such it should be faster than having all the CPUs access a single shared counter. Ian -- 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.