threads - thread safe singleton c++11




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

std :: atomic bool тип не гарантируется, чтобы быть заблокированным?

Верный. std::atomic может быть реализован с использованием блокировок.

то это не атомный или что?

std::atomic является атомарным, было ли реализовано с помощью блокировок или без. std::atomic_flag гарантированно будет реализован без использования блокировок.

Так в чем разница b / w два

Основное отличие, помимо гарантии блокировки:

std::atomic_flag не предоставляет операции загрузки или хранения.

и когда я должен использовать это?

Обычно вам нужно использовать std::atomic<bool> когда вам нужна атомная логическая переменная. std::atomic_flag - структура низкого уровня, которая может использоваться для реализации пользовательских атомных структур.

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

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

  2. std::atomic_flag type

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

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

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

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


std::atomic<T> гарантирует, что обращения к переменной будут атомарными. Однако он не говорит, как достигается атомарность. Он может использовать переменную блокировки или использовать блокировку. Фактическая реализация зависит от вашей целевой архитектуры и типа T

std::atomic_flag с другой стороны, гарантированно реализуется с использованием технологии блокировки.







atomic