簡體   English   中英

Qt:QList線程問題

[英]Qt: QList thread issue

醫生說QList是可重入的。 那么對於以下代碼,線程安全嗎?

//worker thread
...
if(myList.size() == 0)
{
  ...
}

//main thread
foreach(QImage, myList)
{
 ...
}

所有...部分與myList無關。 兩個線程中的myList對象是同一對象。 那這個線程安全嗎?

如果myList是const,因此所有訪問均為只讀,則此線程安全。

但是,如果至少有一個線程代碼正在對該對象執行非常量訪問,則這不是線程安全的。

為確保您正在執行只讀操作,請在myList上聲明一個const引用,並在並發代碼中僅使用此引用:

const QList<QImage> & constMyList = myList;

這與可重入無關。 Reentrancy告訴您,如果您分別在兩個不同線程中的兩個不同QList實例上進行操作(讀取或寫入),則將定義行為。

例如,非可重入類可以在非靜態方法中使用靜態函數/成員。 如果不保護這些靜態函數/成員,則類方法將不會重新進入:即使在兩個獨立的對象上工作時,其行為也可能不確定。

但是,Qt文檔說您對容器的只讀操作是線程安全的 這就是您要尋找的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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