【问题标题】:Boost - shared_mutex has to be same instance?Boost - shared_mutex 必须是同一个实例?
【发布时间】:2011-04-03 07:19:10
【问题描述】:

我想使用带有共享/唯一锁的 shared_mutex 进行读/写。

现在如果我有 2 个对象并且我希望它们使用相同的锁,我可以将第一个互斥锁的值分配给第二个互斥锁吗?
还是我必须创建一个指向 shared_mutex 的指针,然后让它们都指向同一个对象实例?

我的意思是,这会正常工作吗,并且两个对象都可以在同一个锁上工作?:

typedef boost::shared_mutex ReadWriteMutex;
    class A {
    ReadWriteMutex lock;
}

void test() {
    A a = new A();
    B b = new B()
    b.lock = a.lock;
}

【问题讨论】:

    标签: c++ multithreading boost locking


    【解决方案1】:

    这将无法正常工作。 shared_mutex 派生自 boost::noncopyable。您想要使用的是指向互斥体的指针或引用。

    【讨论】:

    • 好的,你认为使用共享指针 boost::shared_ptr 会起作用吗?
    【解决方案2】:

    我宁愿单独创建锁,然后将其传递给您的对象。

    void test()
    {
        ReadWriteMutex  lock;
        A a(lock);             // Notice there is no new here.
        A b(lock);
    
        // DO Stuff with a and b.
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多