J'utilise Android 2.2, qui est livré avec une version de STLport. Pour une raison quelconque, il a été configuré pour ne pas être thread-safe. Cela a été fait en utilisant un #define _NOTHREADS dans un fichier d'en-tête de configuration.C++ est-il compatible avec les threads STL pour des conteneurs distincts (utilisant l'implémentation STLport)?
Lorsque j'ai construit et initialisé distincts conteneurs non partagés (par exemple, des chaînes) à partir de pthreads différents, j'obtenais corruption de la mémoire. Avec _NOTHREADS, il semble que du code de bas niveau dans STL à l'intérieur de allocator.cpp n'effectue pas de verrouillage correct. Il semble analogue à C ne fournissant pas de sécurité de fil pour malloc.
Est-ce que quelqu'un sait pourquoi STL pourrait être construit avec _NOTHREADS par défaut sur Android? En l'éteignant, je me demande s'il pourrait y avoir un effet secondaire. Une chose que je peux penser est des performances légèrement dégradées, mais je ne vois pas beaucoup de choix étant donné que j'utilise beaucoup de threads.
Il peut être utile pour les personnes de répondre à votre question si vous avez donné un exemple de code qui montre le genre de chose qui mène au problème. (Je sais * je * n'ai pas l'expertise pour répondre à celle-ci, le STL n'est pas quelque chose que j'ai étudié en profondeur.) –
Que voulez-vous dire par "objets accédés ..."? – LavaScornedOven
Cette question a déjà été posée (voir http://stackoverflow.com/questions/4029448/thread-safety-for-stl-queue et http://stackoverflow.com/questions/1362110/is-the-c-stl- stdset-thread-safe), mais il y a encore une réponse centrale à cette question. Puisque cette version est la meilleure pour devenir ** l'endroit central pour répondre à cette question sur StackOverflow, veuillez utiliser un gros en-tête pour inclure le nom de votre implémentation et citez et liez la documentation originale. –