Domanda

Ho un programma multi filettato che utilizza QMAP per memorizzare alcuni dati, ma è in crashing ogni tanto, in una stessa linea, quando si contiene () viene chiamata la funzione:

myMap.contains(a) -> Tasti e valori non sono puntatori.

Crash:

#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

La linea che si blocca è semplicemente questa linea:

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

Credo che l'unica cosa che possa causare schianto è che il puntatore d viene cancellato in qualche modo.Qualche idea del perché è schiantato, o come dovrei procedere con il debug?

Grazie

È stato utile?

Soluzione

Accedi a un'istanza della mappa da più thread senza serializzare l'accesso.Non puoi farlo.DEVI:

    .
  1. Avere una copia della mappa in ogni filettatura o

  2. serializza l'accesso alla mappa con un mutex.

  3. Dal momento che i contenitori QT sono implicitamente condivisi, la copia di una mappa è piuttosto economica.La copia deve essere effettuata nel thread proprietario, la copia può quindi essere utilizzata in qualsiasi altro filettatura.L'istanza copiata tornerà in modo sicuro, svuotando in sicurezza se necessario.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top