Должны ли мы всегда предпочитаем std :: scoped_lock над Std :: Lock с политикой блокировки?C++

Программы на C++. Форум разработчиков
Anonymous
Должны ли мы всегда предпочитаем std :: scoped_lock над Std :: Lock с политикой блокировки?

Сообщение Anonymous »

Из моего знания, std :: scoped_lock , кажется, является заменой raii std :: lock с помощью std :: acpict_lock или std :: defer_lock , как то, что показывает в следующих трех частях кода.

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

std::unique_lock lk1(_mtx1, std::defer_lock);
std::unique_lock lk2(_mtx2, std::defer_lock);
std::lock(lk1, lk2);
< /code>
Используйте блокировку с ascipt_lock: < /p>
std::lock(_mtx1, _mtx2);
std::lock_guard lk1(_mtx1, std::adopt_lock);
std::lock_guard lk2(_mtx2, std::adopt_lock);
< /code>
Использовать scoped_lock: < /p>
std::scoped_lock lk(_mtx1, _mtx2);
Означает ли это, что, за исключением проблемы совместимости C ++ 17 против C ++ 11, std :: scoped_lock всегда следует предпочтительнее по сравнению с схемой std :: lock ? Какую -либо тонкую разницу, разработчик, должен знать?

Подробнее здесь: https://stackoverflow.com/questions/797 ... ing-policy

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