Какой std :: sync :: atomic :: Порядок использовать?

Все методыstd::sync::atomic::AtomicBool возьмите порядок в памяти (Relaxed, Release, Acquire, AcqRel и SeqCst), который я раньше не использовал. При каких обстоятельствах следует использовать эти значения? В документации используются запутанные термины «загрузка» и «хранение», которые я не совсем понимаю. Например:

Поток производителя изменяет состояние, удерживаемоеMutexзатем звонитAtomicBool::compare_and_swap(false, true, ordering) (чтобы объединить аннулирования), и если он поменялся местами, отправляет сообщение «аннулировать» в параллельную очередь (например,mpsc или винапиPostMessage). Поток потребителя сбрасываетAtomicBoolчитает из очереди и читает состояние Mutex. Может ли продюсер использовать Relaxed ordering, потому что ему предшествует мьютекс, или он должен использовать Release? Может ли потребитель использоватьstore(false, Relaxed)или он должен использоватьcompare_and_swap(true, false, Acquire) получить изменения от мьютекса?

Что делать, если производитель и потребитель разделяютRefCell вместоMutex?

Ответы на вопрос(1)

Ваш ответ на вопрос