Pregunta

Tengo un programa multi roscado que usa QMAP para almacenar algunos datos, pero se está fallando de vez en cuando, en una misma línea, cuando contiene la función () se llama:

myMap.contains(a) -> Las teclas y los valores no son punteros.

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 línea que se estrella es simplemente esta línea:

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

Creo que lo único que puede causar un choque es que el puntero d se elimina de alguna manera.¿Alguna idea de por qué se estrella, o cómo debo continuar con la depuración?

gracias

¿Fue útil?

Solución

Usted está accediendo a una instancia de mapa de múltiples hilos sin serializando el acceso.Usted no puede hacer eso.Usted debe:

  1. Tener una copia del mapa en cada hilo, o

  2. Serialize el acceso al mapa con un mutex.

  3. Dado que los contenedores QT están compartidos implícitamente, copiando un mapa es bastante barato.La copia debe realizarse en el hilo de propiedad, la copia se puede usar en cualquier otro hilo.La instancia copiada se separará de manera segura si es necesario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top