Mis*_*tyD 10 c++ multithreading stl vector c++11
我正在阅读来自此链接的各种stl容器的线程安全性 现在我遇到了这一点,仅指出了C++ 11
同一容器中的不同元素可以由不同的线程同时修改,除了元素
std::vector<bool>(例如,std::future对象的向量可以从多个线程接收值)
这是否意味着如果我有一个这样的方法,它同时被多个线程使用 (notice the method does not have any locks)
void ChangeValue(int index , int value)
{
someVector[index] = value;
}
Run Code Online (Sandbox Code Playgroud)
上述方法是否安全.我的理解是它只对C++ 11安全.但是,当我查看链接中提到的其他声明时
所有const成员函数可以由同一容器上的不同线程同时调用.此外,成员函数begin(),end(),rbegin(),rend(),front(),back(),data(),find(),lower_bound(),upper_bound(),equal_range(), at()和除了关联容器之外,operator []为了线程安全的目的而表现为const(也就是说,它们也可以由同一容器上的不同线程同时调用).更一般地说,C++标准库函数不会修改对象,除非这些对象可以通过函数的非const参数(包括this指针)直接或间接访问.
我得出的结论是,在C++ 03中,上述方法也可以安全使用.如果我的理解是正确的,请告诉我.
根据C++ 03标准询问某些东西是否是线程安全的是没有意义的 - C++ 03和更早版本没有任何线程或线程安全的概念.
ChangeValue只要没有两个线程传递相同的参数index,或者通过相同参数的调用通过函数外部的某些方式彼此同步,就是数据无竞争(由C++ 11及更高版本定义).