我有一个多线程程序,它使用QMap来存储一些数据,但是当调用contains()函数时,它会在同一行中一直崩溃:
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--)
我相信唯一可能导致崩溃的是指针d
以某种方式被删除。知道它崩溃的原因,或者我应该如何进行调试?
由于
答案 0 :(得分:2)
您正在从多个线程访问地图实例,而无需序列化访问权限。你不能这样做。你必须:
在每个帖子中都有一份地图副本,或
使用互斥锁序列化对地图的访问。
由于隐式共享Qt容器,因此复制地图相当便宜。必须在拥有的线程中创建副本,然后可以在任何其他线程中使用该副本。如果需要,复制的实例将线程安全地分离。