---
title: Атомарные операции
seo:
  title: Атомарные операции — C++ Developer
  description: Тема «Атомарные операции» для собеседования C++ Developer. Что такое атомарная операция?
---

[Все темы C++ Developer](/c-developer)

## <strong>Что такое атомарная операция?</strong> [#q-14bee738d69b81699f86f0162babe8e0]

Атомарная операция неделима с точки зрения других потоков, обращающихся к тому же атомарному объекту. Это не означает запрета прерывания потока планировщиком и не гарантирует lock-free или wait-free выполнение. Несколько отдельных атомарных операций не образуют автоматически одну атомарную транзакцию.

#### Пример использования <code>std&#58;&#58;atomic</code>&#58;

```cpp
#include <atomic>
#include <iostream>
#include <thread>
std::atomic<int> counter(0);

void increment() {
    for (int i = 0; i < 1000; ++i) {
        counter++;
    }
}

int main() {
    std::thread t1(increment);
    std::thread t2(increment);

    t1.join();
    t2.join();

    std::cout << "Counter: " << counter << std::endl;
    return 0;
}
```

#### Основные характеристики&#58;

1. <strong>Неделимость</strong>&#58; Операция выполняется полностью или не
   выполняется вовсе.

1. Безопасность&#58; Корректно используемые атомарные обращения исключают гонку на самом атомарном объекте. Для согласования других данных и составных инвариантов нужны подходящий memory_order и протокол синхронизации.

1. Производительность зависит от типа, реализации и конкуренции. Проверяйте is_lock_free()&#58; реализация некоторых атомарных типов может использовать блокировки.

Атомарные операции полезны для простых операций над переменными, таких как инкременты, декременты и обмен значениями, обеспечивая при этом безопасность данных в многопоточных программах.

:::note[Ссылки для изучения]

1. [Руководство по атомарности в C++](https://habr.com/ru/companies/piter/articles/670456/)
   :::
