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

use*_*288 5 c++ boost mutex vector

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

  boost::mutex myMutex ;
  std::vector< boost::mutex > mutexVec; 
  mutexVec.push_back(myMutex); 
Run Code Online (Sandbox Code Playgroud)

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

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

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

谢谢

Fer*_*cio 9

你可以使用一个boost 指针容器:

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

boost::ptr_vector<boost::mutex> pv;
pv.push_back(new boost::mutex);
Run Code Online (Sandbox Code Playgroud)

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


Pet*_*erT 5

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

而是使用:

boost::mutex *myMutex = new boost::mutex();
std::vector< boost::mutex *> mutexVec; 
mutexVec.push_back(myMutex);
Run Code Online (Sandbox Code Playgroud)

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

  • 请不要将原始指针放在STL容器中.这就像杀小狗一样.请注意,`shared_ptr`具有线程特性,您需要注意...... (4认同)

Bil*_*eal 2

boost::mutex不能存储在 a 中,vector因为它不可复制构造。正如 PeterT 的回答中提到的,可以将指向互斥体的指针存储在内部vector,相反,您确实应该重新考虑依赖于此类事物的设计。请记住,vector它本身没有任何线程要求,并且尝试执行任何修改向量的操作都不是线程安全的操作。