QMAP가 CRASHES를 호출 할 때 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--)

나는 충돌을 일으킬 수있는 유일한 것을 믿는다는 것을 믿는다.왜 그것이 충돌하는지 또는 디버깅을 어떻게 진행해야합니까?

감사합니다

도움이 되었습니까?

해결책

액세스를 직렬화하지 않고 여러 스레드에서지도 인스턴스에 액세스하는 것입니다.당신은 그것을 할 수 없습니다.당신은 다음 중 하나를 수행해야합니다 :

  1. 각 스레드 또는

  2. 맵의 복사본이 있습니다.

  3. 뮤텍스가있는지도에 대한 액세스를 직렬화하십시오.

  4. Qt 컨테이너가 암시 적으로 공유되므로지도를 복사하는 것은 다소 쌉니다.소유 스레드에서 복사본을 만들어야하며 복사본을 다른 스레드에서 사용할 수 있습니다.복사 된 인스턴스가 필요한 경우 스레드가 안전하게 분리됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top