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

Анализ и оценка кода с использованием mutex

Компании, где спрашивали:

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

Необходимо внимательно проанализировать приведённый пример на C++ и выявить возможные проблемы, связанные с синхронизацией через std::mutex и std::lock_guard. Обратите внимание на то, как мьютекс cerr_mutex захватывается в функциях foo и bar, и оцените, существует ли риск взаимоблокировки при вызове bar() из foo(). При обнаружении недостатков предложите корректные варианты исправления.

# include <iostream>
# include <mutex>

std::mutex cerr_mutex;

int bar()
{
    std::lock_guard<std::mutex> lock(cerr_mutex);
    std::cerr << "bar" << std::endl;

    return 42;
}

void foo()
{
    std::lock_guard<std::mutex> lock(cerr_mutex);
    std::cerr << "foo, bar - " << bar() << std::endl;
}

int main(int argc, char* argv[])
{
    foo();

    return 0;
}