2011-12-19 45 views
1
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>這是我第一次看到友元函數類的範圍內確定。它合法嗎?友元函數的定義和性病的替代升壓功能::鎖定

問題2>std::lock的替代助推功能是什麼?

我看到了下面的用法:

boost::unique_lock<MutexType1> l1(m1); 
boost::unique_lock<MutexType2> l2(m2,boost::try_to_lock); 
if(!l2) 
{ 
    return 1; 
} 
+0

第一個問題已經回答,搜索SO。 – Xeo

回答

-1
boost::mutex m; 
boost::lock(m); //or unlock 
m.lock(); //or unlock again 
boost::lock_guard<boost::mutex> lock(m); 

應該是升壓語法。 據我所知,boost :: mutex和std :: mutex在寫作方面幾乎相同:)

0

也許有點遲,但boost(標準的可能來自那裏)有完全相同的功能。儘管它們並不是可變的,但是。

你可以找到他們here

boost::lock(lhs.m,rhs.m); 
boost::lock_guard<Mutex> lock_a(lhs.m,boost::adopt_lock); 
boost::lock_guard<Mutex> lock_b(rhs.m,boost::adopt_lock);