Почему qmap сбивает, при звонке содержится (), в функции findnode?
Вопрос
У меня есть многопоточная программа, которая использует QMAP для хранения некоторых данных, но сейчас он сбивается в настоящее время, а затем, в той же той же линии, когда называется функция ().
myMap.contains(a)
-> Клавиши и значения не указатели.
авария:
#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
Линия, которая сбивается, это просто эта строка:
for (int i = d->topLevel; i >= 0; i--)
Я считаю, что единственное, что может вызвать авария, заключается в том, что указатель GeneracodicCode как-то удаляется.Любая идея, почему это сбивается, или как я должен продолжить отладку?
Спасибо
Решение
Вы обращаетесь к экземпляру карты из нескольких потоков без сериализации доступа.Ты не можешь сделать это.Вы должны либо:
-
есть копия карты в каждом потоке, или
-
serialize Доступ к карте с mutex.
Поскольку qt контейнеров неявно обмениваются, копирование карты довольно дешево.Копия должна быть выполнена в ведете, копия может затем использоваться в любой другой поток.Скопированный экземпляр будет безопасно отсоединять при необходимости.