Предположим, что a class
с a std::mutex
:
class Foo
{
std::mutex mutex_;
std::string str_;
// other members etc
public:
friend void swap(Foo& lhs, Foo& rhs) noexcept;
}
Каким образом можно реализовать метод swap
здесь? Требуется ли/безопасно блокировать каждый мьютекс отдельно, а затем менять все? например.
void swap(Foo& lhs, Foo& rhs) noexcept
{
using std::swap;
std::lock_guard<std::mutex> lock_lhs {lhs.mutex_}, lock_rhs {rhs.mutex_};
swap(ls.str_, rhs.str_);
// swap everything else
}
Я видел, что в С++ 17, std::lock_guard
будет иметь конструктор , используя несколько мьютексов, чтобы избежать взаимоблокировки, но я не уверен, проблема здесь?