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.