Sobes.tech
Junior — Middle

Тавзеҳ диҳед мақсад ва кори std::atomic дар C++.

sobes.tech AI

Ҷавоб аз 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> тана;
    for (int i = 0; i < 10; ++i) {
        тана.emplace_back(increment);
    }
    for (auto& t : тана) {
        t.join();
    }
    std::cout << "Counter: " << counter << std::endl; // интизор меравад 10000
}

Инчунин, std::atomic кӯмак мекунад, ки кодҳои бисёртана бехатар бидуни истифодаи mutex барои амалиётҳои оддӣ нависанд.