Estoy usando Android 2.2, que viene con una versión de STLport. Por algún motivo, se configuró para que no sea seguro para subprocesos. Esto se hizo usando #define _NOTHREADS en un archivo de encabezado de configuración.¿C++ STL es seguro para subprocesos para contenedores distintos (mediante la implementación de STLport)?
Cuando construí e inicialicé distintos contenedores no compartidos (por ejemplo, cadenas) de diferentes pthreads, recibí daños en la memoria.
Con _NOTHREADS, parece que algún código de bajo nivel en AWL dentro de allocator.cpp no hace el bloqueo adecuado. Parece análogo a C no proporcionar seguridad de hilo para malloc.
¿Alguien sabe por qué STL podría construirse con _NOTHREADS por defecto en Android? Al apagar esto, me pregunto si puede haber un efecto secundario. Una cosa en la que puedo pensar es en el rendimiento ligeramente degradado, pero no veo mucha opción, dado que estoy usando muchos subprocesos.
Podría ayudar a las personas a responder a su pregunta si usted dio algún código de muestra que mostrara el tipo de cosas que conducen al problema. (Sé que * I * no tengo la experiencia necesaria para responder a esto; el STL no es algo que haya estudiado en profundidad.) –
¿Qué quiere decir con "acceso ... a objetos"? – LavaScornedOven
Esta pregunta se ha formulado anteriormente (consulte http://stackoverflow.com/questions/4029448/thread-safety-for-stl-queue y http://stackoverflow.com/questions/1362110/is-the-c-stl- stdset-thread-safe), pero todavía hay una respuesta central a esta pregunta. Dado que esta versión es tan buena como cualquiera para convertirse ** en ** el lugar central para responder esta pregunta en StackOverflow, utilice un encabezado grande para incluir el nombre de su implementación, y cite y vincule a la documentación original. –