2012-12-21 87 views
0

我正在使用watchdir將服務器添加到內部集合的服務器上工作。將boost :: bind與包含boost :: mutex的類一起使用

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

fileFoundCallback參數也通過boost::bind創建:該wa​​tchdir由被這樣創建一個線程定期瀏覽

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

我想用互斥來保護我的收藏從併發訪問但我的問題是boost::mutex類是不可複製的,因此Collection類中不能有互斥體,因爲boost::bind需要可複製參數。

我不喜歡靜態互斥體的想法,因爲它在語義上是錯誤的,因爲互斥體的作用是阻止我的集合在被修改時被讀取。

我能做些什麼來解決這個問題?

回答

3

在互斥體周圍使用std::ref or std::cref。也就是說,不是,:

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

寫:

boost::mutex yourmutex; 
boost::bind(..., std::ref(yourmutex), ...); 
相關問題