class some_big_object;
bool operator<(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 bool operator<(X const& lhs, X const& rhs) #1
{
if(&lhs == &rhs)
return false;
std::lock(lhs.m,rhs.m); #2
std::lock_guard<std::mutex> lock_a(lhs.m,std::adopt_lock);
std::lock_guard<std::mutex> lock_b(rhs.m,std::adopt_lock);
return lhs.some_detail<rhs.some_detail;
}
};
質問1をロック::>これは私が今までにフレンド関数は、クラスのスコープ内で定義された参照は初めてです。それは合法ですか?フレンド関数の定義とstdの代替ブースト機能が
質問2>std::lock
の代わりの追加機能は何ですか?
私は、次の利用状況を見てきました:
boost::unique_lock<MutexType1> l1(m1);
boost::unique_lock<MutexType2> l2(m2,boost::try_to_lock);
if(!l2)
{
return 1;
}
最初の質問は既に回答済みです。 – Xeo