【发布时间】:2013-10-06 09:08:45
【问题描述】:
考虑这个类:
#include <vector>
class A {
private:
std::vector<int> m_vector;
public:
void insertElement(int i) {
m_vector.push_back(i);
}
const std::vector<int>& getVectorRef() const {
return m_vector;
}
};
方法getVectorRef线程安全吗?
是否有可能在getVectorRef 的返回过程中弹出另一个线程并调用insertElement,从而改变成员向量并且getVectorRef 的调用者获得错误的常量引用?
有两个const限定符(一个用于载体,另一个方法)在线程安全的背景下没有意义?
【问题讨论】:
-
“线程安全”是一个被过度使用的词......它有时听起来像是你扔给一些代码的灵丹妙药,它以某种方式使并发编程变得容易。是的,
getVectorRef是“线程安全的”,但这些信息有什么用?您仍然可以使用给定的界面创建大量损坏的代码。您仍然需要了解您的代码在做什么! -
您需要确保同步对线程之间的向量的访问,请参阅stackoverflow.com/questions/4346742/…以获取更多信息。 span>
标签: c++ thread-safety const-method