std::scoped_lock и блокирует их без взаимной блокировки благодаря фиксированному порядку внутри.">
Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpSpThSc 538 of 696 menu
◀ ▶

Захват нескольких мьютексов в C++

Сразу несколько мьютексов берет std::scoped_lock и блокирует их без взаимной блокировки благодаря фиксированному порядку внутри.

Два замка защитят пару счетчиков, которые поток изменит за один проход:

#include <iostream> #include <mutex> #include <thread> int main() { int left = 0; int right = 0; std::mutex mx_a; std::mutex mx_b; std::thread worker([&]() { std::scoped_lock lock(mx_a, mx_b); ++left; ++right; }); worker.join(); std::cout << left + right << "\n"; return 0; }

Захватите std::mutex a и b через std::scoped_lock в одном потоке и увеличьте два int. Выведите сумму.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить