C++11/C++03和std::矢量线程安全
C++11 / C++03 and std::vector thread safety
我从这个链接中了解到各种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;
}
以上方法安全吗。我的理解是,它只对C++11是安全的。然而,当我看到链接中提到的其他声明时
所有const成员函数都可以由不同的同一容器上的线程。此外,成员的功能begin()、end()、rbegin()、rend()、front()、back()、data()、find(),lower_bound()、upper_bound关联容器,运算符[],出于以下目的表现为常量线程安全性(也就是说,它们也可以由同一容器上的不同线程)。更一般地说++标准库函数不会修改对象,除非这些对象可以通过函数的常量直接或间接访问参数,包括this指针。
我得出的结论是,在C++03中,上述方法也可以安全地使用。请告诉我我的理解是否正确。
在C++03标准下,询问某些东西是否是线程安全的是没有意义的——C++03和更早的版本没有任何线程或线程安全的概念。
只要没有两个线程为index
传递相同的参数,或者传递相同参数的调用通过函数外部的某种方式彼此同步,ChangeValue
就没有数据争用(如C++11及更高版本所定义的)。
相关文章:
- 如何将元素添加到数组的线程安全函数?
- C++中的线程安全删除
- 在std::thread中,joinable()然后join()线程安全吗
- 在c++队列中使用pop和visit实现线程安全
- 以线程安全的方式调用"QQuickPaintedItem::updateImage(const QImage&image)"(no QThread)
- 全局变量 多读取器 一个写入器多线程安全?
- 共享队列的线程安全
- boost::文件系统::recursive_directory_iterator多线程安全
- 以线程安全的方式转换 C/C++ 中时区名称字符串的时区偏移量
- 线程安全运算符<<
- 如何使缓存线程安全
- C++线程安全:如果只有一个线程可以写入非原子变量,但多个线程从中读取. 会遇到问题吗?
- 提升精神 V2 Qi 语法线程安全吗?
- asio 链对象线程安全吗?
- 线程安全队列 c++
- 提供对不同类型的数据(建议、代码审查)的线程安全访问的类
- 如何以线程安全的方式更改目录?
- 线程安全的引用计数队列C++
- 析构函数和线程安全
- 适用于大型数组的无复制线程安全环形缓冲区