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 &gt;这是我第一次看到朋友函数在类的范围内定义。这是合法的吗?
问题2 &gt; std::lock
的替代提升函数是什么?
我见过以下用法:
boost::unique_lock<MutexType1> l1(m1);
boost::unique_lock<MutexType2> l2(m2,boost::try_to_lock);
if(!l2)
{
return 1;
}
答案 0 :(得分: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);
答案 1 :(得分:-1)
boost::mutex m;
boost::lock(m); //or unlock
m.lock(); //or unlock again
boost::lock_guard<boost::mutex> lock(m);
应该是boost语法。 据我所知,boost :: mutex和std :: mutex的写作几乎相同:)