Qt:关于QMap线程安全的问题

时间:2016-06-29 12:12:41

标签: c++ multithreading qt thread-safety qmap

我在Windows 7上使用Qt5 在我当前的应用程序中,我有以下内容(此处简化):

QMap<int, QString> map;

int _WorkerThread_(int index)  
{  
    QString new_element = "whatever";   
    ...   
    map.insert(index, new_element);  // [Q1]  
    ...   
}   

int _MainThread_()   
{   
    int i;
    ...   
    i = some_value();
    map.remove(i); // [Q2]   
    ...    
}   

我有2个关于上述代码的问题,并且与QMap线程安全相关(我在Qt文档中没有找到关于它的更多信息):

1) map.insert(..) - 是否可以看到代码行标记为[Q1] - 安全使用,如上所述,启动更多{{1线程同时?

2)_WorkerThread_ - 中删除元素的安全性/线程安全性,请参见标记为[Q2] 的代码行 - 当时(不知何故) )保证QMap的值不在工作线程当前使用的索引中吗?

[编辑]:
所以,你说我应该使用互斥或​​什么? 提前感谢任何想法或建议:)

1 个答案:

答案 0 :(得分:5)

QMap 不是线程安全,可重入。

要回答您的编辑,您可以使用Qt提供的工具,例如类(例如: QMutex )或基本功能(例如: QCoreApplication: :事件后()

有关更多信息,请参阅此处的Qt说明:http://doc.qt.io/qt-4.8/threads-reentrancy.html

希望有所帮助!