Boost.Atomicпредставляет собой библиотеку, которая предоставляет<atomic>типы данных и операции на этих типах данных, а также ограничения упорядочивания памяти, необходимые для координации нескольких потоков через атомные переменные. Он реализует интерфейс, определенный стандартом C++11, но делает эту функцию доступной для платформ, не имеющих поддержки системы / компилятора для этой конкретной функции C++11.
Пользователи этой библиотеки уже должны быть знакомы с параллелизмом в целом, а также элементарными понятиями, такими как «взаимное исключение».
Реализация использует инструкции для конкретных процессоров, где это возможно (через встроенный ассемблер, библиотеки платформ или внутренние компоненты компилятора), и возвращается к «эмуляции» атомных операций через блокировку.
 
Операции с «обычными» переменными не являются атомными. Это означает, что с<int n=0>изначально, две нити одновременно выполняются.
void function()
{
  n ++;
}
В результате<n==1>вместо 2: каждый поток будет считывать старое значение в регистр процессора, увеличивать его и записывать результат обратно. Поэтому обе нити могут писать<1>, не зная, что другая нить делает то же самое.
Объявляя<atomic<int> n=0>вместо этого, одна и та же операция на этой переменной всегда приводит к<n==2>, поскольку каждая операция на этой переменной являетсяатомной.: Это означает, что каждая операция ведет себя так, как если бы она была строго последовательной по отношению к другой.
Атомные переменные полезны для двух целей:
- как средство для координации нескольких потоков с помощью пользовательских протоколов координации
- Более быстрые альтернативы «закрытому» доступу к простым переменным
Взгляните напримерыраздела для общих шаблонов.