我在使用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}}需要可复制的参数。
我不喜欢静态互斥体的想法,因为它在语义上是错误的,因为互斥体的作用是防止我的集合在被修改时被读取。
我该怎么做才能解决这个问题?
答案 0 :(得分:3)
在互斥锁周围使用std::ref or std::cref。也就是说,而不是:
boost::mutex yourmutex;
boost::bind(..., yourmutex, ...);
写:
boost::mutex yourmutex;
boost::bind(..., std::ref(yourmutex), ...);