Примечание: Этот вопрос касается C++ 11. Ответ на тот же вопрос в C++ 17 (или более поздних версиях), возможно, изменился. Для получения дополнительной информации:Каков наилучший способ блокировки нескольких std :: mutex'es?
Когда мы хотим, чтобы заблокировать несколько std::mutex
«эс, мы используем std::lock()
. Но std::lock()
не предоставляет функцию RAII.
Если мы хотим заблокировать std::mutex
по RAII-способу, мы используем std::lock_guard
. Но std::lock_guard
не может заблокировать несколько std::mutex
'безопасно.
Есть ли способ воспользоваться преимуществами обоих методов, чтобы заблокировать несколько std::mutex
'в RAII способом?
+1 И 'std :: lock' не ограничивается двумя замками. Он может обрабатывать любое число (вплоть до пределов компилятора для вариативных шаблонов). –
Были высказаны опасения относительно эффективности 'std :: lock'. См. Этот ответ: http://stackoverflow.com/a/14525010/576911 для решения этих проблем. –