The answer (like with virtually all questions like this on golang-nuts) is:
Possibly, but you can not rely on it. Assuming that it is might break your
program now or at a non-specific future date or on a non-specific current
or future processor.

If you need atomic operations, please use the sync/atomic package. If you
don't, your program is incorrect and go tooling will complain about it
being incorrect.

On Mon, Jan 9, 2017 at 2:46 PM, 陈诚 <ncu.br...@gmail.com> wrote:

> Yes, I think you are right about the case in my sample code. The code
> doesn't show exactly what I'm concerned about. I just wanna know whether a
> write to a global pointer in 64-bit machine an atomic operation or not.
>
> 在 2017年1月9日星期一 UTC+8上午6:22:12,Caleb Doxsey写道:
>
>> 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.
>

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