Один счётчик, десять потоков и неправильный результат: разбираемся в многопоточности C++
Представим простую задачу: десять потоков должны увеличить общий счётчик по миллиону раз. Математика элементарная — в результате ожидаем десять миллионов. Но программа может вывести совсем другое число. Причём ошибка не обязательно будет повторяться при каждом запуске. Разберёмся, почему так происходит, как исправить проблему с помощью std::mutex и std::atomic , когда нужны std::condition_variable и std::future , а также чем std::jthread удобнее обычного std::thread . Все примеры рассчитаны на C++20, если не указано иное. Читать далее
