Sobes.tech
Junior — Middle

Explique la finalité et le fonctionnement de std::atomic en C++.

sobes.tech IA

Réponse de l'IA

std::atomic en C++ est conçu pour garantir des opérations atomiques sur des variables, ce qui est important lors de la programmation concurrente. Les opérations atomiques garantissent que la lecture ou l’écriture de la valeur d’une variable se fait en une seule étape, sans interruption, évitant ainsi les conditions de course et les données incorrectes.

Par exemple, si plusieurs threads incrémentent un compteur simultanément, l’utilisation d’une variable normale peut entraîner des erreurs. Avec std::atomic<int>, les opérations d’incrémentation seront sûres sans synchronisation supplémentaire :

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

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

void increment() {
    for (int i = 0; i < 1000; ++i) {
        ++counter; // incrément atomique
    }
}

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; // Attendu 10000
}

Ainsi, std::atomic aide à écrire un code multithread sécurisé sans utiliser de mutex pour des opérations simples.