Hello, 

I have read Go1.19(tip) memory model 
document(https://tip.golang.org/ref/mem)  and have following question. (I 
think my question is valid for the current model(https://go.dev/ref/mem), 
though.)

Here is my translation of so-called "Message Passing" litmus test to Go 
program.

https://go.dev/play/p/hPn7yrIN4Sf

Does this program can panic according to the memory model?
I think it can panic according to the model, but I'm not confident because 
it is subtle problem for me.

My reasoning is as follows.

First of all, this program has data race. Behavior for data races are 
documented in the section "Implementation Restrictions for Programs 
Containing Data Races". According to this section, 

- read y := y (L18) can observe both y = 1(L13) and y = 0(initialization at 
L5)
- read x := x (L19) can observe both x = 1(L12) and x = 0(initialization at 
L5)

so the result "x == 0 && y == 1" can actually happen, causing this program 
to panic.

Is my reasoning correct?  

-- 
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/89a233c6-f0b1-4126-8215-c0bb871e0962n%40googlegroups.com.

Reply via email to