2011-06-23 53 views
0

這是一個線程問題,我基本上開始製作一個線程安全的庫。我的用例如下 -關於使用QThreadStorage的線程安全

struct <> 
    { 

     int thread_specific_value; 
} 

1)例如旋轉5個線程。

2)例如,每個線程在上述數據結構中進行操作並存儲thread_specific_value。這在每個線程的初始化時動態分配並添加到QThreadStorage中。

3)一旦所有的線程返回到主線程,我喜歡訪問所有線程的errno值並做一些處理。在我從主線程刪除線程之前,我可以獲取其存儲數據的信息並存儲在主線程的特定存儲中。

簡而言之,我如何遍歷所有線程特定的存儲數據的QThreadStorage並從主線程執行一些處理?

回答

3

存儲在QThreadStorage中的數據只能從放置在那裏的線程訪問。期。如果你想從其他線程訪問相同的數據,你必須在別處存儲它。特別是,線程特定的值在線程退出時被銷燬;如果要保留該值,請在線程退出之前將其保存在某處。

總之,不要嘗試使用QThreadStorage進行線程間通信。這不是它的目的。

+0

感謝您的回覆。正如我剛纔所說,我沒有刪除線程。因此,根據文檔,線程特定的數據不會被破壞。是否有任何其他自定義開源線程存儲數據結構,我可以使用它可以使用此可訪問性? 「 – Kartlee

+1

」QThreadStorage獲取數據的所有權(必須在堆上創建新數據),並在線程退出時(通常或通過終止)將其刪除。「 - 當它終止時,而不是當它被刪除。儘管將自己的數據通信方法從線程傳遞出來並不困難,並且在用例方面有足夠的差別,我不知道任何真正標準化的方法......(另外暴露TLS是非常罕見的用例.. ) – bdonlan

+0

我們仍然可以使用QThreadStorage進行某種線程間通信。比如說,用一些被普通函數識別的標記來標記線程。我用它來識別代碼運行的線程的「名稱」。 – AlexanderVX