Гонка данных и защита в C++
Гонка данных возникает, когда два потока обращаются к одной переменной, хотя бы одно обращение - запись, и нет синхронизации.
Для общего int без защиты результат
непредсказуем. В рабочем примере возьмем
std::mutex вокруг каждого увеличения:
#include <iostream>
#include <mutex>
#include <thread>
int main() {
int counter = 0;
std::mutex mx;
auto bump = [&]() {
std::lock_guard<std::mutex> guard(mx);
++counter;
};
std::thread a(bump);
std::thread b(bump);
a.join();
b.join();
std::cout << counter << "\n";
return 0;
}
Оба потока завершились, мьютекс сериализовал
запись, поэтому на экране ожидаемое 2.
Два std::thread увеличивают общий int под std::mutex. Выведите итог.