260*_*607 7 c++ multithreading
我在多线程应用程序中使用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) {}
}
Run Code Online (Sandbox Code Playgroud)
当我关闭应用程序时,有时候,在调试中会有2条错误消息,有时候不会有错误消息.我经常听到人们谈论std :: vector不是线程安全的,这是其中一个案例吗?我正在使用Visual Studio 2008,提升线程,矢量的大小是固定的.任何人都可以提供一些关于如何在多线程应用程序中使用std :: vector的建议.
谢谢.
Die*_*ühl 26
实际上,状态是或者不是线程安全的绝对没有意义X!您需要有资格获得什么样的用途.例如,当它以某种方式在一个线程中使用并在另一个线程中被破坏时,几乎没有任何类将是"线程安全的".
也就是说,std::vector<T>不是线程安全的声明,与其重复次数无关,是错误的.然而,似乎大多数人既不了解也不了解给出的线程安全保证.std::vector<T>在以下意义上是线程安全的:
这适用于矢量结构本身.对包含对象的访问受限于对它们施加的任何规则.这些显然不是许多人想到的线程安全保证,但任何更强大的东西都不能用于容器界面.
| 归档时间: |
|
| 查看次数: |
20821 次 |
| 最近记录: |