Вступить в клуб →
лёгкаявопросМногопоточность и синхронизация

Два потока инкрементируют общий счётчик

int counter = 0;

void worker() {
    for (int i = 0; i < 100000; ++i) {
        ++counter;
    }
}

std::thread t1(worker), t2(worker);
t1.join(); t2.join();
std::cout << counter;

Что напечатает программа?

  • Ровно `200000`: инкремент целого выполняется одной инструкцией процессора
  • Ровно `100000`: у каждого потока своя копия глобальной переменной
  • Ровно `200000`, если пометить `counter` как `volatile`: это ключевое слово запрещает держать переменную в регистре и делает доступ к ней атомарным
  • Значение от `100000` до `200000`: это гонка данных, часть инкрементов теряется

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела