Я не знал о переменных std::atomic
, но знал о std::mutex
(странный справа!), Предоставленный стандартом; Однако одна вещь, бросилось в глаза: есть два, казалось бы, одни и те же (для меня) атомарные типы, предусмотренные стандартом, перечисленные ниже:разница между атомным bool стандарта и атомным флагом
std::atomic<bool>
типаstd::atomic_flag
типа
Также упоминается на примере std::atomic_flag type
-
std: : atomic_flag - атомный булев тип. В отличие от всех специализаций std :: atomic, он гарантированно не блокируется. В отличие от std :: atomic, std :: atomic_flag не предоставляет операции загрузки или хранения.
который я не понимаю. Is std::atomic bool type
не гарантируется, что он будет заблокирован? Тогда это не атомно или что?
Так в чем же разница между двумя и когда я должен использовать это?
«Atomic» и «lock-free» не являются синонимами. Вы можете легко блокироваться, не будучи атомарным (это происходит, когда вы не выполняете синхронизацию, например: P), и вы можете легко получить атомную операцию, которая не является блокировкой (например, используя монитор). – Luaan