【问题标题】:friend function definition and alternative boost function of std::lockstd::lock 的友元函数定义和替代提升函数
【发布时间】:2011-12-19 01:58:06
【问题描述】:
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;
}

【问题讨论】:

  • 第一个问题已经回答了,搜索一下。

标签: c++ multithreading boost locking


【解决方案1】:

可能有点晚了,但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); 

【讨论】:

    【解决方案2】:
    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 在写作上几乎是一样的:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-02
      • 1970-01-01
      • 1970-01-01
      • 2015-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-07
      相关资源
      最近更新 更多