繁体   English   中英

C ++ 11 / C ++ 03和std :: vector线程安全

[英]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(),equal_range(), at()和除了关联容器之外,operator []为了线程安全的目的而表现为const(也就是说,它们也可以由同一容器上的不同线程同时调用)。 更一般地说,C ++标准库函数不会修改对象,除非这些对象可以通过函数的非const参数(包括this指针)直接或间接访问。

我得出的结论是,在C ++ 03中,上述方法也可以安全使用。 如果我的理解是正确的,请告诉我。

根据C ++ 03标准询问某些东西是否是线程安全的是没有意义的 - C ++ 03和更早版本没有任何线程或线程安全的概念。

只要没有两个线程传递相同的index参数, ChangeValue就是无数据竞争(由C ++ 11及更高版本定义),否则传递相同参数的调用将通过函数外部的某些方式彼此同步。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM