簡體   English   中英

Qt:有關QMap線程安全性的問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM