Безопасно ли для объекта вернуть блокировку на себя?C++

Программы на C++. Форум разработчиков
Anonymous
Безопасно ли для объекта вернуть блокировку на себя?

Сообщение Anonymous »

Правильный/рекомендуемый стиль этого кода? То есть гарантированно ли возвращаемая блокировка удерживает мьютекс заблокированным в процессе возврата, в отличие от, скажем, разблокировки, а затем повторной блокировки (или даже разблокировки и сохранения разблокировки). Меня беспокоит действие деструктора возвращаемого значения.

Код: Выделить всё

#include 

struct BigObject
{
auto get_lock()
{
return std::scoped_lock(m_mutex);
}
private:
std::mutex m_mutex;
};

BigObject big;

int main()
{
auto lock = big.get_lock();

// ...
}
Предположим, что это контекст какой-то более крупной программы с одновременным доступом к глобальному большому объекту..
"Обычный" стиль будет для вызывающей стороны. для объявления и инициализации блокировки, но здесь мы инкапсулируем мьютекс и вызываем вызывающую функцию. Таким образом, объект можно заблокировать только через эту точку входа.
Бонусный вопрос: будет ли корректным std::lock_guard вместо std::scoped_lock?< /п>

Подробнее здесь: https://stackoverflow.com/questions/791 ... -on-itself

Вернуться в «C++»