Shouldn't this particular case be ok? From the memory 
doc: https://golang.org/ref/mem

The go statement that starts a new goroutine happens before the goroutine's 
> execution begins.


So the write has to happen before the goroutine starts. At least that's 
what the example indicates:
 

> For example, in this program: 

 

var a string

func f() {

print(a)

}

func hello() {

a = "hello, world"

go f()

}

 

> calling hello will print "hello, world" at some point in the future 
> (perhaps after hello has returned).


On Sunday, January 8, 2017 at 1:17:56 PM UTC-5, 陈诚 wrote:

> Is the size of a pointer value 32 bits or 64 bits in golang when build 
> with `GOARCH=amd64` option specified and running on 64-bit OS?
> If it's 64-bit size, is a global pointer value 8-byte aligned in memory so 
> that a read or write operation of that pointer value is carried out 
> atomically?
> For example, in the following code, is it possible that the global pointer 
> p is only partially updated when the read goroutine read the pointer?
> var p *int
>
> void main() {
>     i := 1
>     p = &i
>     go func() { fmt.Println(*p) } ()
> }
>
> The scenario I'm concerning is that there is only one write but multiple 
> reads on a global pointer value, and reading of an old value of the pointer 
> is not important. Thanks in advance!
>

-- 
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