Frage

Ich habe ein Multithread-Programm, das QMap zum Speichern einiger Daten verwendet, aber es stürzt ab und zu in derselben Zeile ab, wenn die Funktion contains () aufgerufen wird:

myMap.contains(a) -> schlüssel und Werte sind keine Zeiger.

Absturz:

#0 findNode (akey=<synthetic pointer>, this=0x120eec4c) at /var/build/workspace/stage/nto/usr/include/qt4/QtCore/qmap.h:486 #1 contains (akey=<synthetic pointer>, this=0x120eec4c) at /var/build/workspace/stage/nto/usr/include/qt4/QtCore/qmap.h:555

Die Zeile, die abstürzt, ist einfach diese Zeile:

for (int i = d->topLevel; i >= 0; i--)

Ich glaube, das einzige, was zum Absturz führen kann, ist dieser Zeiger d wird irgendwie gelöscht.Irgendeine Idee, warum es abstürzt oder wie soll ich mit dem Debuggen fortfahren?

Danke

War es hilfreich?

Lösung

Sie greifen von mehreren Threads aus auf eine Karteninstanz zu, ohne den Zugriff zu serialisieren.Das kannst du nicht tun.Sie müssen entweder:

  1. Haben Sie eine Kopie der Karte in jedem Thread, oder

  2. Serialisieren Sie den Zugriff auf die Karte mit einem Mutex.

Da Qt-Container implizit gemeinsam genutzt werden, ist das Kopieren einer Karte ziemlich billig.Die Kopie muss im besitzenden Thread erstellt werden, die Kopie kann dann in jedem anderen Thread verwendet werden.Die kopierte Instanz wird bei Bedarf threadsicher getrennt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top