[英]Qt: Questions about QMap thread-safety
我在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
希望對您有所幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.