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