0

我想知道如何在另一个类的不同实例中共享一个类中的互斥锁。

现在,我有一个类 Indexer,它有一个 Boost mutex 和 condition_variable 作为私有成员变量。我在 main 中创建了 Indexer 类的 auto_ptr,并将 Indexer 的指针传递给另一个类 Robot 的实例。

我这样做如下:

std::auto_ptr<Indexer> index_service(new Indexer());
Robot a(*index_service.get());
Robot b(*index_service.get());
Robot c(*index_service.get());

机器人的构造函数是:

Robot(Indexer &index_service)
{
  this->index_service = index_service;
}

机器人的标题看起来像:

class Robot
{
   public:
     Robot(Indexer &index_service);
   private:
     Indexer index_service;
};

但是,由于互斥锁是不可复制的,我得到一个错误。

我正在考虑制作互斥锁和条件变量 shared_ptrs 但我读到这可能会导致意外行为。

有人可以告诉我正确/正确的方法吗?

谢谢!

4

3 回答 3

2

我不是 C++ 大师,但似乎引用传递和指针的邪恶组合在这里很麻烦。

具体来说,你这样做:this->index_service = index_service;
但是值是作为传入的Indexer &index_service
并且由于本地 index_service 是类型Indexer index_service;
,我相信分配意味着复制。

我假设你只想要一个 的实例Indexer,所以你真的想在你的 Robot 类中存储对它的引用。为此,您需要让您的构造函数获取一个指针(*index_service.get()无论如何,这就是调用给您的)。此外,您希望您的类变量是指针类型。

于 2012-09-03T03:39:13.730 回答
0

就像您可以使用std::shared_ptr的另一个选项一样,您可以std::auto_ptrRobot类中使用更改Indexer tostd::shared_ptr`。

class Robot
{
public:
    Robot( std::shared_ptr<Indexer> const &index_service)
    {
        this->index_service = index_service;
}
private:
   std::shared_ptr<Indexer> index_service;
};

std::shared_ptr<Indexer> index_service(new Indexer());
Robot a(*index_service.get());
Robot b(*index_service.get());
Robot c(*index_service.get());
于 2012-09-03T11:53:08.590 回答
0

在你的类中声明一个静态 boost::mutex。请记住在您的 .cpp 文件中定义它。

在这里检查: 在类中使用静态互斥锁

于 2012-09-03T03:19:04.907 回答