Все методы std::sync::atomic::AtomicBool принимают порядок памяти (Relaxed, Release, Acquire, AcqRel и SeqCst), которые я раньше не использовал. При каких обстоятельствах эти значения должны использоваться? В документации используются запутанные термины "загрузка" и "хранение", которые я действительно не понимаю. Например:
Производственный поток мутирует некоторое состояние, сохраненное Mutex, затем вызывает AtomicBool:: compare_and_swap(false, true, ordering) (для объединения недействительности), и если он поменялся, отправляет сообщение "invalidate" в параллельную очередь (например, mpsc или winapi PostMessage). Потребительский поток сбрасывает AtomicBool, считывает из очереди и считывает состояние, сохраненное Mutex. Может ли производитель использовать Relaxed ordering, потому что ему предшествует мьютекс или он должен использовать Release? Может ли потребитель использовать store(false, Relaxed), или он должен использовать compare_and_swap(true, false, Acquire) для получения изменений от мьютекса?
Что делать, если производитель и потребитель разделяют RefCell вместо Mutex?