Все методы 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
?