Я использую std :: vector в качестве общих данных в многопоточном приложении. Я инкапсулирую поток внутри класса, например,
class ABC {
public:
double a, b, c;
};
boost::mutex mutex1;
class XYZ {
public:
XYZ(vector<ABC> & pVector) {
ptrVector = &pVector;
m_thread = boost::thread(&XYZ::Start, this);
}
~XYZ() {}
void Start();
public:
vector<ABC> * ptrVector;
boost::thread m_thread;
};
void XYZ::Start() {
try {
while(1) {
boost::this_thread::interruption_point();
for (unsigned int i=0; i<ptrVector->size(); i++) {
{
boost::mutex::scoped_lock lock(mutex1);
ptrVector->at(i).a = double(rand())/10000;
ptrVector->at(i).b = double(rand())/10000;
ptrVector->at(i).c = double(rand())/10000;
}
}
}
}
catch(boost::thread_interrupted) {}
catch(std::exception) {}
}
Когда я закрываю приложение, иногда , в отладке будет 2 сообщения об ошибке, иногда ошибки не будет Сообщения. Я часто слышал, как люди говорят о том, что std :: vector не является потокобезопасным, это один из случаев? Я использую Visual Studio 2008, поток ускорения, размер вектора фиксированный. Может ли кто-нибудь дать совет о том, как использовать std :: vector в многопоточном приложении.
Спасибо.