<分区>
我有下面的代码有时会出现段错误?
vector<int> myvector;
void function1()
{
for(int i = 0;i<10;i++)
{
cout<<"writer thread:"<<i<<endl;
myvector.push_back(i);
}
}
void function2()
{
for(int i = 0;i<10;i++)
{
cout<<"reader thread:";
cout<<myvector[i]<<endl;
}
}
int main()
{
thread t1(function1);
thread t2(function2);
t1.join();
t2.join();
}
我对一般容器和特定 vector 的线程安全规则/保证有点困惑。我在面试中被问到这个问题,并没有说出为什么写在线程上和写在其他线程不是线程安全的操作。
在下面的 vector push_back 链接中,我在“数据竞争”部分看到“否则,不会访问任何现有元素,并且同时访问或修改它们是安全的”。这个陈述如何证明 vector 写操作不是线程安全的?