Почему qmap сбивает, при звонке содержится (), в функции findnode?

StackOverflow https://stackoverflow.com//questions/23015094

  •  21-12-2019
  •  | 
  •  

Вопрос

У меня есть многопоточная программа, которая использует 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 как-то удаляется.Любая идея, почему это сбивается, или как я должен продолжить отладку?

Спасибо

Это было полезно?

Решение

Вы обращаетесь к экземпляру карты из нескольких потоков без сериализации доступа.Ты не можешь сделать это.Вы должны либо:

  1. есть копия карты в каждом потоке, или

  2. serialize Доступ к карте с mutex.

  3. Поскольку qt контейнеров неявно обмениваются, копирование карты довольно дешево.Копия должна быть выполнена в ведете, копия может затем использоваться в любой другой поток.Скопированный экземпляр будет безопасно отсоединять при необходимости.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top