¿Es posible que una tienda con memory_order_relaxed nunca llegue a otros hilos?

Supongamos que tengo un hiloA que escribe a unatomic_int x = 0;, utilizandox.store(1, std::memory_order_relaxed);. Sin ningún otro método de sincronización, ¿cuánto tiempo pasaría antes de que otros hilos puedan ver esto?x.load(std::memory_order_relaxed);? ¿Es posible que el valor escrito enx permanece completamente en el subproceso local dada la definición actual del modelo de memoria C / C ++ que ofrece el estándar?

El caso práctico que tengo a mano es donde un hiloB lee unatomic_bool con frecuencia para verificar si tiene que dejar de fumar; Otro hilo, en algún momento, escribecierto a este bool y luego llama a join () en el subproceso B. Claramente no me importa llamar a join () antes de que el subproceso B pueda incluso ver que atomic_bool se configuró, ni me importa cuando el subproceso B ya vio el cambio y salió de la ejecución antes Yo llamo join (). Pero me pregunto: usandomemory_order_relaxed en ambos lados, ¿es posible llamar a join () y bloquear "para siempre" porque el cambio nunca se propaga al hilo B?

Editar

Me puse en contacto con Mark Batty (el cerebro detrás de la verificación matemática y, posteriormente, la fijación de los requisitos del modelo de memoria C ++). Originalmente sobre algo más (que resultó ser un error conocido en cppmem y su tesis; así que afortunadamente no me hice el ridículo, y aproveché la oportunidad para preguntarle sobre esto también; su respuesta fue:

P: ¿Puede teóricamente ser que tal tienda [memory_order_relaxed sin (ninguna operación de liberación siguiente)] nunca llegue al otro hilo?
Marca:Teóricamente, sí, pero no creo que se haya observado.
P: En otras palabras, ¿las tiendas relajadas no tienen ningún sentido a menos que las combine con alguna operación de liberación (y adquiera en el otro hilo), suponiendo que desea que otro hilo lo vea?
Marca:Casi todos los casos de uso para ellos usan liberar y adquirir, sí.

Respuestas a la pregunta(2)

Su respuesta a la pregunta