将boost :: bind与包含boost :: mutex的类一起使用

时间:2012-12-21 09:41:17

标签: c++ boost-thread boost-bind boost-mutex

我在使用watchdir的服务器上将项目添加到内部集合中。 watchdir会被一个如下所示的线程定期浏览:

this->watchDirThread = new boost::thread(boost::bind(&Filesystem::watchDirThreadLoop,
                                                      this,
                                                      this->watchDir,
                                                      fileFoundCallback));

fileFoundCallback参数也是通过boost::bind

创建的
boost::bind(&Collection::addFile, this->collection, _1)

我想保护我的集合免受使用互斥锁的并发访问,但我的问题是boost::mutex类是不可复制的,因此我的Collection类中不能有互斥锁{ {1}}需要可复制的参数。

我不喜欢静态互斥体的想法,因为它在语义上是错误的,因为互斥体的作用是防止我的集合在被修改时被读取。

我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:3)

在互斥锁周围使用std::ref or std::cref。也就是说,而不是:

boost::mutex yourmutex;
boost::bind(..., yourmutex, ...);

写:

boost::mutex yourmutex;
boost::bind(..., std::ref(yourmutex), ...);