Sobes.tech
Назад к вопросам
Junior — Middle
85

Объясните назначение и работу std::atomic в C++.

Компании, где спрашивали
ГК Адепт

Ответ от нейросети

sobes.tech AI

std::atomic в C++ предназначен для обеспечения атомарных операций с переменными, что важно при работе с многопоточностью. Атомарные операции гарантируют, что чтение или запись значения переменной происходит целиком, без прерываний, предотвращая состояния гонки и некорректные данные.

Например, если несколько потоков одновременно увеличивают счетчик, использование обычной переменной может привести к ошибкам. С std::atomic<int> операции инкремента будут безопасны без дополнительной синхронизации:

#include <atomic>
#include <thread>
#include <vector>
#include <iostream>

std::atomic<int> counter(0);

void increment() {
    for (int i = 0; i < 1000; ++i) {
        ++counter; // атомарный инкремент
    }
}

int main() {
    std::vector<std::thread> threads;
    for (int i = 0; i < 10; ++i) {
        threads.emplace_back(increment);
    }
    for (auto& t : threads) {
        t.join();
    }
    std::cout << "Counter: " << counter << std::endl; // Ожидается 10000
}

Таким образом, std::atomic помогает писать безопасный многопоточный код без использования мьютексов для простых операций.