разница между атомным bool стандарта и атомным флагом
Я не знал о переменных std::atomic, но знал о переменных std::mutex (странно!) обеспечивается стандартом; однако одна вещь привлекла мое внимание: есть два, казалось бы, одинаковых (для меня) атомарных типа, предоставляемых стандартом, перечисленных ниже:
std::atomic_flagтип
Также упоминается на примере std::atomic_flag type -
Std:: atomic_flag-это атомарный булев тип. В отличие от всех специализаций std:: atomic, он гарантированно будет без блокировки. В отличие от std:: atomic, std:: atomic_flag не предоставляет операций загрузки или хранения.
Чего я никак не могу понять. Разве не гарантируется, что std::atomic bool type будет свободным от блокировки? Тогда это не атомная бомба или что?
Так в чем же разница между этими двумя и когда я должен их использовать?
2 ответов:
Std:: atomic bool type не гарантирует отсутствие блокировки?
Правильно.
std::atomicможет быть реализовано с помощью блокировок.Тогда он не атомный или что?
std::atomicявляется атомарным независимо от того, был ли он реализован с использованием блокировок или без них.std::atomic_flagгарантированно реализуется без использования блокировок.Так в чем же разница ч / б два
Основное отличие помимо гарантии отсутствия блокировки состоит в следующем:
std::atomic_flagне делает обеспечьте операции загрузки или хранения.
И когда я должен использовать какой?
Обычно вы хотите использовать
std::atomic<bool>, когда вам нужна атомарная булева переменная.std::atomic_flag- это низкоуровневая структура, которая может быть использована для реализации пользовательских атомарных структур.
std::atomic<T>гарантирует, что доступ к переменной будет атомарным. Он, однако, не говорит, как достигается атомарность. Это может быть использование переменной без блокировки или использование блокировки. Фактическая реализация зависит от целевой архитектуры и типаT.
std::atomic_flagс другой стороны, гарантируется, что он будет реализован с использованием свободной от блокировки техники.
Comments