Назад к задачам
Junior — Senior
7

Ревью и улучшение функции обработки сообщений из общей очереди

Получайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Условие задачи

Необходимо провести ревью функции handle_message, которая читает сообщения из глобальной очереди и передаёт их в длительный расчёт.

  1. Выявить логические ошибки и потенциальные состояния гонки.
  2. Предложить и реализовать рефакторинг кода.
  3. Особое внимание уделить корректному использованию мьютекса: правильному захвату, отпусканию и исключению двойного разблокирования.
std::queue<std::string> g_messages;

void long_calculation_with_message(const std::string& message);

void handle_message() {
    std::mutex mutex;
    mutex.lock();

    if (!g_messages.empty()) {
        const std::string& message = g_messages.front();
        mutex.unlock();

        long_calculation_with_message(message);

        mutex.lock();
        g_messages.pop();
        mutex.unlock();
    }

    mutex.unlock();
}