gpt4 book ai didi

c++ - C++ STL 对于不同的容器是否是线程安全的(使用 STLport 实现)?

转载 作者:可可西里 更新时间:2023-11-01 15:22:10 26 4
gpt4 key购买 nike

我使用的是 Android 2.2,它带有一个 STLport 版本。由于某种原因,它被配置为非线程安全的。这是在配置头文件中使用#define _NOTHREADS 完成的。

当我从不同的 pthreads 构造和初始化 distinct 非共享容器(例如字符串)时,我遇到了内存损坏。

对于 _NOTHREADS,看起来 allocator.cpp 中的 STL 中的一些低级代码没有进行正确的锁定。这似乎类似于 C 不为 malloc 提供线程安全。

有谁知道为什么在 Android 上默认使用 _NOTHREADS 构建 STL?通过关闭它,我想知道是否会有副作用。我能想到的一件事是性能略有下降,但鉴于我使用的是大量线程,我看不到太多选择。

最佳答案

SGI STL

SGI STL 是所有其他 STL 实现的祖母。

参见 the SGI STL docs .

The SGI implementation of STL is thread-safe only in the sense that simultaneous accesses to distinct containers are safe, and simultaneous read accesses to to shared containers are safe. If multiple threads access a single container, and at least one thread may potentially write, then the user is responsible for ensuring mutual exclusion between the threads during the container accesses.

G++

libstdc++ docs

We currently use the SGI STL definition of thread safety.

STL端口

STLPort docs

Please refer to SGI site for detailed document on thread safety. Basic points are:

  • simultaneous read access to the same container from within separate threads is safe;
  • simultaneous access to distinct containers (not shared between threads) is safe;
  • user must provide synchronization for all accesses if any thread may modify shared container.

关于c++ - C++ STL 对于不同的容器是否是线程安全的(使用 STLport 实现)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4404387/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com