0

我正在使用 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因为boost::bind需要可复制的参数。

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

我能做些什么来解决这个问题?

4

1 回答 1

3

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

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

写:

boost::mutex yourmutex;
boost::bind(..., std::ref(yourmutex), ...);
于 2012-12-21T09:49:57.560 回答