Какой 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
?