Files
concurrency-in-action/source/listing_3.6.cpp
2018-10-18 00:40:34 -05:00

34 lines
573 B
C++

#include <mutex>
class some_big_object {
};
void
swap(some_big_object& lhs, some_big_object& rhs)
{
}
class X {
private:
some_big_object some_detail;
mutable std::mutex m;
public:
X(some_big_object const& sd) : some_detail(sd) {}
friend void swap(X& lhs, X& rhs)
{
if (&lhs == &rhs)
return;
std::lock(lhs.m, rhs.m);
std::lock_guard<std::mutex> lock_a(lhs.m, std::adopt_lock);
std::lock_guard<std::mutex> lock_b(rhs.m, std::adopt_lock);
swap(lhs.some_detail, rhs.some_detail);
}
};
int
main()
{
}