c++ - std::lock 的友元函数定义和替代 boost 函数

标签 c++ multithreading boost locking

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 函数是什么?

我见过如下用法:

boost::unique_lock<MutexType1> l1(m1);
boost::unique_lock<MutexType2> l2(m2,boost::try_to_lock);
if(!l2)
{
    return 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); 

关于c++ - std::lock 的友元函数定义和替代 boost 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8556400/

相关文章:

c++ - 重定向 HTTP 请求

java - 在图书馆管理系统上使用多线程

Android:Java线程如何对应原生线程?

c++ - boost lambda : Invoke method on object

c++ - std::greater{} 和 std::greater<int>() 有什么区别?

c++ - unsigned long long 的 C++ 代码中奇怪的数据损坏

c++ - 使用可变参数模板和 boost 将表映射到 map

c++ - 将 boost cpp_int 用于 pow() 和 rand() 等函数

c++ - 调用 cuda 内核时的性能损失

multithreading - Delphi中两个线程相互同步的最佳方法