如何在C ++中定义向量<boost :: mutex>?</boost :: mutex>

时间:2011-11-24 06:19:15

标签: c++ boost vector mutex

我想用boost :: mutex定义一个向量,如:

  boost::mutex myMutex ;
  std::vector< boost::mutex > mutexVec; 
  mutexVec.push_back(myMutex); 

但是,我在Linux上遇到错误:

/boost_1_45_0v/include/boost/thread/pthread/mutex.hpp:33:错误:âboost:: mutex :: mutex(const boost :: mutex&amp;)â是私有的 /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/ext/new_allocator.h:104:错误:在此上下文中

我无法通过在线搜索找到解决方案。

感谢

3 个答案:

答案 0 :(得分:8)

您可以使用提升pointer container

#include <boost/thread.hpp>
#include <boost/ptr_container/ptr_vector.hpp>

boost::ptr_vector<boost::mutex> pv;
pv.push_back(new boost::mutex);

ptr_vector获取其指针的所有权,以便在适当时删除它们,而不会出现智能指针可能引入的任何开销。

答案 1 :(得分:5)

复制构造函数是私有的。你不应该复制互斥锁。

改为使用:

boost::mutex *myMutex = new boost::mutex();
std::vector< boost::mutex *> mutexVec; 
mutexVec.push_back(myMutex);

如果您不想自己管理内存,请使用boost::shared_ptr<boost::mutex>代替boost::mutex*

答案 2 :(得分:2)

boost::mutex无法存储在vector中,因为它不是可复制的。正如PeterT的回答中所提到的,可以在vector内存储指向互斥锁的指针,你真的应该重新考虑一个依赖于这些东西的设计。请记住vector本身没有任何线程要求,尝试修改向量的任何操作都不是线程安全的操作。