Перейти к содержимому
шпаргалка.
Esc
навигацияоткрыть⌘Jпредпросмотр
На этой странице

Атомарные операции

Все темы C++ Developer

Что такое атомарная операция?

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

Пример использования std::atomic:

#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;
}

Основные характеристики:

  1. Неделимость: Операция выполняется полностью или не выполняется вовсе.

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

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

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

Эта страница была полезной?