Sobes.tech
Junior — Middle

Wyjaśnij cel i działanie std::atomic w C++.

sobes.tech AI

Odpowiedź od AI

std::atomic w C++ jest przeznaczony do zapewnienia operacji atomowych na zmiennych, co jest ważne podczas pracy z wielowątkowością. Operacje atomowe gwarantują, że odczyt lub zapis wartości zmiennej odbywa się w całości, bez przerw, zapobiegając stanom wyścigu i nieprawidłowym danym.

Na przykład, jeśli kilka wątków jednocześnie zwiększa licznik, użycie zwykłej zmiennej może prowadzić do błędów. Z std::atomic<int> operacje inkrementacji będą bezpieczne bez dodatkowej synchronizacji:

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

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

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

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

W ten sposób std::atomic pomaga pisać bezpieczny kod wielowątkowy bez użycia mutexów dla prostych operacji.