关于QMap线程安全的问题

Qt: Questions about QMap thread-safety

本文关键字:问题 安全 线程 QMap 关于      更新时间:2023-10-16

我在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)当同时启动多个_WorkerThread_线程时,map.insert(..) - (参见代码行标记[Q1])是否可以像上面那样安全使用?

2)QMap中删除一个元素是多么安全/线程安全- 参见代码行标记[Q2] -当(以某种方式)保证i的值不在工作线程当前使用的索引中?

[编辑]:
你是说我应该用互斥锁还是怎么的?

QMap 不是线程安全的,, 凹。

要回答您的编辑,您可以使用Qt提供的工具,如类(例如:QMutex)或基本函数(例如:QCoreApplication::postEvent())

有关更多信息,请参阅Qt解释:http://doc.qt.io/qt-4.8/threads-reentrancy.html

希望有帮助!