为什么qmap崩溃,在调用contain()时,在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--)
我相信唯一可能导致崩溃的唯一可能是指指针生成的方式以某种方式删除。任何想法为什么它崩溃,或者我应该如何继续调试?
感谢
解决方案
您正在从多个线程访问地图实例,而无需序列化访问。你不能这样做。您必须:
-
在每个线程中有映射的副本,或
用互斥锁序列化对地图的访问。
由于QT容器被隐式共享,复制地图相当便宜。必须在拥有线程中进行副本,然后可以在任何其他线程中使用副本。如果需要,复制的实例将安全地分离。
不隶属于 StackOverflow