¿Qué std :: sync :: atomic :: ordenar para usar?

Todos los métodos destd::sync::atomic::AtomicBool tome un pedido de memoria (Relaxed, Release, Acquire, AcqRel y SeqCst), que no he usado antes. ¿En qué circunstancias deben usarse estos valores? La documentación utiliza términos confusos de "carga" y "tienda" que realmente no entiendo. Por ejemplo:

Un hilo productor muta algún estado en poder de unMutex, luego llamaAtomicBool:: ::compare_and_swap(false, true, ordering) (para fusionar invalidaciones) y, si se intercambia, publica un mensaje de "invalidación" en una cola concurrente (p. ej.mpsc o un winapiPostMessage) Un hilo de consumidor restablece elAtomicBool, lee de la cola y lee el estado que retiene el Mutex. ¿Puede el productor usar pedidos relajados porque está precedido por un mutex, o debe usar Release? ¿Puede el consumidor usarstore(false, Relaxed)o debe usarcompare_and_swap(true, false, Acquire) recibir los cambios del mutex?

¿Qué pasa si el productor y el consumidor comparten unRefCell en vez de unaMutex?

Respuestas a la pregunta(1)

Su respuesta a la pregunta