the "bug" is still there. any purpose? 在2013年6月7日星期五 UTC+8 下午8:55:56<Dmitry Vyukov> 写道:
> On Fri, Jun 7, 2013 at 4:31 PM, Maxim Khitrov <m...@mxcrypt.com> wrote: > > Hi, > > > > I assume that the code is correct, but I'd like to understand why it's > > safe. The line "old := m.state" in Mutex.Lock()'s for loop accesses a > > variable that could be shared and updated by multiple goroutines, but > > it doesn't use atomic.LoadInt32. Is that because aligned 32-bit loads > > are atomic on all supported platforms anyway, or is there another > > reason? > > This is a bug. > > > > As a more general question, when are you required to use atomic.Load* > > functions to guarantee correct behavior? > > Whenever there are concurrent writes to the variable. > > > > If m.state was a 64-bit int, > > would you have to use LoadInt64 to support 32-bit platforms? > > > > Likewise, what if you have a pointer that's being updated in one > > goroutine, but being read in others? The update should probably be > > done using Store or CompareAndSwap functions, but do you need an > > atomic Load as well? > > Yes, one needs atomic.Load. > -- 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/2aa00a97-1e95-4821-a278-b05655604799n%40googlegroups.com.