Ich benutze Android 2.2, das mit einer Version von STLport kommt. Aus irgendeinem Grund wurde es als nicht threadsicher konfiguriert. Dies wurde mithilfe eines #define _NOTHREADS in einer Konfigurationsheaderdatei durchgeführt.Ist C++ STL Thread-sicher für unterschiedliche Container (mit STLport-Implementierung)?
Als ich distinct non-shared Container (z. B. Strings) von verschiedenen Pthreads erstellt und initialisiert, bekam ich Speicherbeschädigung.
Mit _NOTHREADS, sieht es aus wie einige Low-Level-Code in STL innerhalb von allocator.cpp nicht ordnungsgemäßes Sperren. Es scheint analog zu C nicht Thread-Sicherheit für Malloc bereitzustellen.
Weiß jemand, warum STL möglicherweise mit _NOTHREADS standardmäßig auf Android gebaut wird? Wenn ich das deaktiviere, frage ich mich, ob es einen Nebeneffekt geben könnte. Eine Sache, an die ich denken kann, ist eine leicht verschlechterte Leistung, aber ich sehe nicht viel Auswahl, da ich viel Threading verwende.
Es könnte Leuten helfen, Ihre Frage zu beantworten, wenn Sie einen Beispielcode geben, der die Art von Sache zeigt, die zu dem Problem führt. (Ich weiß * ich * habe nicht das Fachwissen, um dies zu beantworten; die STL ist nicht etwas, das ich gründlich studiert habe.) –
Was meinen Sie mit "zugegriffen ... Objekte"? – LavaScornedOven
Diese Frage wurde schon einmal gestellt (siehe http://stackoverflow.com/questions/4029448/thread-safety-for-stl-queue und http://stackoverflow.com/questions/1362110/is-the-c-stl- stdset-thread-safe), aber es gibt noch eine zentrale Antwort auf diese Frage. Da diese Version so gut wie jeder ist, um ** der ** zentrale Ort zu werden, um diese Frage in StackOverflow zu beantworten, verwenden Sie bitte eine große Überschrift, um den Namen Ihrer Implementierung einzufügen, und zitieren Sie und verlinken Sie auf die Originaldokumentation. –