Захват нескольких мьютексов в 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. Выведите сумму.