【发布时间】:2010-04-13 14:47:58
【问题描述】:
我有两个关于 STL 的问题
1) 为什么 STL 不是线程安全的?有没有线程安全的结构?
2) 如何使用 GDB 调试 STL?在 GDB 中,如何打印矢量?
【问题讨论】:
标签: c++ multithreading stl
我有两个关于 STL 的问题
1) 为什么 STL 不是线程安全的?有没有线程安全的结构?
2) 如何使用 GDB 调试 STL?在 GDB 中,如何打印矢量?
【问题讨论】:
标签: c++ multithreading stl
vector 包含一个连续的内存块。因此,一旦找到指向该内存块的指针,它就可以像常规数组一样显示。具体细节取决于您使用的 STL 实现。【讨论】:
标准的 c++ 容器不是线程安全的,因为您实际上很可能需要比容器本身更高级别的锁定。换句话说,您可能希望两个或多个操作一起安全。
例如,如果您有多个线程在运行:
v.push_back(0);
v.push_back(1);
你不会得到一个很好的 0 和 1 交替的向量,它们可能是混乱的。你需要锁定这两个命令才能得到你想要的。
【讨论】:
STL 不是线程安全的,因为很多人不需要线程安全,并且因为这将线程上下文引入到类中,否则这些类不需要了解线程的概念。
您可以封装对容器的访问并提供您自己的线程安全(或您的特定设计和实现施加的其他限制。)
【讨论】:
【讨论】: