我在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
的值不在工作线程当前使用的索引中吗?
[编辑]:
所以,你说我应该使用互斥或什么? 提前感谢任何想法或建议:)
答案 0 :(得分:5)
QMap 不是线程安全,但可重入。
要回答您的编辑,您可以使用Qt提供的工具,例如类(例如: QMutex )或基本功能(例如: QCoreApplication: :事件后() 强>)
有关更多信息,请参阅此处的Qt说明:http://doc.qt.io/qt-4.8/threads-reentrancy.html
希望有所帮助!