Безопасно ли для объекта вернуть блокировку на себя?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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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