C++ 关于STL线程安全和STL调试的问题

C++ 关于STL线程安全和STL调试的问题,c++,multithreading,stl,C++,Multithreading,Stl,关于STL,我有两个问题 1) 为什么STL不是线程安全的?是否有线程安全的结构 2) 如何使用GDB调试STL?在GDB中,如何打印向量 容器数据结构几乎总是需要同步(例如a)来防止。由于线程不是C++标准(PRC++ +0x)的支持,所以不能将这些线程添加到STL。此外,对于不需要同步的情况,同步的成本非常高。STL容器可以在多线程应用程序中使用,只要手动执行此同步。或者,您可以创建与STL算法兼容的线程安全容器,如 向量包含一个连续的内存块。因此,一旦找到指向该内存块的指针,它可以以与常规

关于STL,我有两个问题

1) 为什么STL不是线程安全的?是否有线程安全的结构

2) 如何使用GDB调试STL?在GDB中,如何打印向量

  • 容器数据结构几乎总是需要同步(例如a)来防止。由于线程不是C++标准(PRC++ +0x)的支持,所以不能将这些线程添加到STL。此外,对于不需要同步的情况,同步的成本非常高。STL容器可以在多线程应用程序中使用,只要手动执行此同步。或者,您可以创建与STL算法兼容的线程安全容器,如
  • 向量
    包含一个连续的内存块。因此,一旦找到指向该内存块的指针,它可以以与常规数组相同的方式显示。具体细节取决于您使用的STL实现

  • STL不是线程安全的,因为很多人不需要线程安全,并且因为它将线程上下文引入到类中,否则就不需要了解任何关于线程的概念

    您可以封装对容器的访问,并提供自己的线程安全性(或特定设计和实现施加的其他限制)

  • 因为仍然存在单线程程序
  • 看一看

  • <>标准的C++容器不是线程安全的,因为您最可能希望的是比容器本身更高级别的锁定。换句话说,您可能希望两次或两次以上的操作能够安全地进行

    例如,如果有多个线程正在运行:

    v.push_back(0);
    v.push_back(1);
    
    你不会得到一个很好的0和1的交替向量,它们可能是混乱的。您需要锁定这两个命令以获得所需的内容