Rav*_*avi 11 c++ stl thread-safety
我使用的是Android 2.2,它附带了一个STLport版本.出于某种原因,它被配置为非线程安全的.这是在配置头文件中使用#define _NOTHREADS完成的.
当我从不同的pthreads 构造和初始化不同的非共享容器(例如字符串)时,我得到了内存损坏.
使用_NOTHREADS,看起来在allocator.cpp中的STL中的某些低级代码不能正确锁定.这似乎类似于C不为malloc提供线程安全性.
有谁知道为什么在Android上默认使用_NOTHREADS构建STL?通过关闭它,我想知道是否可能有副作用.我能想到的一件事是性能略有下降,但鉴于我使用了大量的线程,我没有看到太多的选择.
SGI STL是所有其他STL实现的祖母.
请参阅SGI STL文档.
STL的SGI实现仅在对不同容器的同时访问是安全的意义上是线程安全的,并且对共享容器的同时读取访问是安全的.如果多个线程访问单个容器,并且至少有一个线程可能写入,则用户负责确保在容器访问期间线程之间的互斥.
我们目前使用SGI STL定义的线程安全性.
有关线程安全的详细文档,请参阅SGI站点.基本要点是:
- 从单独的线程内同时读取同一容器是安全的;
- 同时访问不同的容器(不在线程之间共享)是安全的;
- 如果任何线程可以修改共享容器,则user必须为所有访问提供同步.