Sobes.tech
Junior — Middle

Objasnite svrhu i rad std::atomic u C++.

sobes.tech АИ

Одговор од АИ

std::atomic u C++ je namenjen za obezbeđivanje atomskih operacija sa promenljivima, što je važno pri radu sa višestrukim nitima. Atoomske operacije garantuju da čitanje ili pisanje vrednosti promenljive bude u celosti, bez prekida, sprečavajući uslove trke i netačne podatke.

Na primer, ako više niti istovremeno povećava brojač, korišćenje obične promenljive može dovesti do grešaka. Sa std::atomic<int> operacije inkrementacije biće sigurne bez dodatne sinhronizacije:

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

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

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

int main() {
    std::vector<std::thread> niti;
    for (int i = 0; i < 10; ++i) {
        niti.emplace_back(increment);
    }
    for (auto& t : niti) {
        t.join();
    }
    std::cout << "Counter: " << counter << std::endl; // Očekuje se 10000
}

Na ovaj način, std::atomic pomaže u pisanju sigurnog višestrukog niti koda bez korišćenja muteksa za jednostavne operacije.