[英]how to define a vector<boost::mutex> in C++ ?
我想用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&)â是私有的/usr/lib/gcc/x86_64-redhat-linux/4.1 .2 /../../../../ include / c ++ / 4.1.2 / ext / new_allocator.h:104:错误:在此上下文中
我无法通过在线搜索找到解决方案。
谢谢
你可以使用一个boost 指针容器 :
#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获取其指针的所有权,以便在适当时删除它们,而不会出现智能指针可能引入的任何开销。
复制构造函数是私有的。 你不应该复制互斥锁。
而是使用:
boost::mutex *myMutex = new boost::mutex();
std::vector< boost::mutex *> mutexVec;
mutexVec.push_back(myMutex);
如果您不想自己管理内存,请使用boost::shared_ptr<boost::mutex>
而不是boost::mutex*
boost::mutex
不能存储在vector
因为它不是可复制构造的。 正如PeterT的回答中提到的那样,可以在vector
存储指向互斥锁的指针,你真的应该重新考虑一个依赖于这些东西的设计。 请记住, vector
本身没有任何线程要求,并且尝试做任何修改向量的操作都不是线程安全的操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.