STL容器的只读操作

时间:2009-11-26 06:14:46

标签: c++ stl

这里需要建议:哪个STL容器的操作被认为是只读的?以vector<int>为例,可以安全地说任何不改变底层int数据的操作都是只读的吗?我正在编写一个多线程程序,但不太确定是否可以通过引用/指针传递容器的线程安全。

之间,同样的规则也适用于basic_string吗?任何推荐的资源有助于快速了解STL容器的内部机制?感谢。

4 个答案:

答案 0 :(得分:1)

顺便提一下,标准对容器的安全性一无所知。但是标有const的方法可以保证不会修改容器。*

如果线程同时读取和写入数据,则需要同步它们。

**逻辑修改,即。虽然我不知道任何容器,但任何可变成员都可以改变const方法。*

答案 1 :(得分:1)

声明const的方法很可能不会修改容器,尽管你无法确定。

在多线程应用程序中使用STL容器时,您需要一个外部同步机制。 C ++标准库不是线程安全的,并且在没有同步的情况下从多个线程使用任何将导致未定义的行为,假设其中一个线程更改了向量对象的状态。

答案 2 :(得分:0)

在stl容器上运行时,在多线程线程环境中使用pthread读写锁。他们非常有效率。 pthread read -write locks的参考:

Pthread Read Write Locks - Yolinux

答案 3 :(得分:0)

标准中唯一提到的是

  • 多个读者是线程安全的(duhhhhhh)
  • 不同容器的多个编写器是线程安全的(同样是duhh ...但是更小的:)这意味着没有实现可以修改静态成员可能会损害线程安全性