разница между атомным bool стандарта и атомным флагом



Я не знал о переменных std::atomic, но знал о переменных std::mutex (странно!) обеспечивается стандартом; однако одна вещь привлекла мое внимание: есть два, казалось бы, одинаковых (для меня) атомарных типа, предоставляемых стандартом, перечисленных ниже:





  1. std::atomic<bool> тип



  2. std::atomic_flag тип



Также упоминается на примере std::atomic_flag type -




Std:: atomic_flag-это атомарный булев тип. В отличие от всех специализаций std:: atomic, он гарантированно будет без блокировки. В отличие от std:: atomic, std:: atomic_flag не предоставляет операций загрузки или хранения.




Чего я никак не могу понять. Разве не гарантируется, что std::atomic bool type будет свободным от блокировки? Тогда это не атомная бомба или что?



Так в чем же разница между этими двумя и когда я должен их использовать?

604   2  

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

    Ничего не найдено.