¿Es seguro leer un puntero de función al mismo tiempo sin un bloqueo?

Supongamos que tengo esto:

go func() {
    for range time.Tick(1 * time.Millisecond) {
        a, b = b, a
    }
}()

Y en otra parte:

i := a // <-- Is this safe?

Para esta pregunta, no es importante cuál es el valor dei es con respecto al originala ob. La única pregunta es si leera es seguro. Es decir, ¿es posiblea sernil, parcialmente asignado, inválido, indefinido, ... ¿algo más que un valor válido?

He tratado de hacer que falle pero hasta ahora siempre tiene éxito (en mi Mac).

No he podido encontrar nada específico más allá de esta cita en elEl modelo de memoria Go Doc:

Las lecturas y escrituras de valores mayores que una sola palabra de máquina se comportan como múltiples operaciones del tamaño de palabras de máquina en un orden no especificado.

¿Esto implica que una sola escritura de palabras de máquina es efectivamente atómica? Y, si es así, ¿se escribe el puntero de función en Ir a una sola operación de palabra de máquina?

Actualizar: Aqui estaa solución adecuadamente sincronizada

Respuestas a la pregunta(2)

Su respuesta a la pregunta