Я использую Android 2.2, который поставляется с версией STLport. По какой-то причине он настроен как безопасный для потоков. Это было сделано с помощью #define _NOTHREADS в файле заголовка конфигурации.
Когда я построил и инициализировал отдельные не общие контейнеры (например, строки) из разных pthreads, я получил повреждение памяти.
С _NOTHREADS, похоже, какой-то низкоуровневый код в STL внутри allocator.cpp не делает правильной блокировки. Похоже, что C не обеспечивает безопасность потока для malloc.
Кто-нибудь знает, почему STL может быть построена с помощью _NOTHREADS по умолчанию на Android? Отключив это, мне интересно, может ли быть побочный эффект. Одна вещь, о которой я могу думать, - это слегка ухудшенная производительность, но я не вижу большого выбора, учитывая, что я использую много потоков.