Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpSpThRc 534 of 696 menu
◀ ▶

Гонка данных и защита в 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. Выведите итог.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить