Сопоставление Middle Многопоточность и модель памяти обновлено
Примитив синхронизации и задача
Вопрос
Сопоставьте примитив и задачу, для которой он подходит.
Попробуйте сами
Нажмите слева, потом подходящее справа.
Показать ответ и разбор
Коротко
Правильный примитив упрощает код: атомик для одного значения, мьютекс для группы данных, условная переменная для ожидания события, future для одноразового результата.
Правильные пары
std::atomic<int>Счётчик запросов из многих потоковstd::condition_variableРабочий поток ждёт появления задачи в очередиstd::shared_mutexЧастое чтение конфигурации, редкая записьstd::scoped_lockЗахват двух мьютексов без дедлокаstd::future и std::promiseПолучить результат вычисления из другого потокаstd::call_onceОднократная инициализация ресурсаРазбор
Правильный примитив упрощает код: атомик для одного значения, мьютекс для группы данных, условная переменная для ожидания события, future для одноразового результата.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «Многопоточность и модель памяти»
- Найти потенциальный дедлок по порядку захвата мьютексов
- Пул потоков: кто и когда выполнит задачу
- Публикация данных через флаг
- Ловушка std::async
- Потокобезопасная ленивая инициализация
- compare_exchange
- Ожидание на condition_variable
- Что такое гонка данных