2011-07-08 227 views
3

爲什麼我們需要boost :: thread_specific_ptr,換句話說,沒有它,我們不能輕易做什麼?爲什麼我們需要boost :: thread_specific_ptr?

我可以看到爲什麼pthread提供了pthread_getspecific()等等。這些函數對於在死線之後進行清理非常有用,並且可以方便地從C風格函數中調用(顯而易見的方式是將指針傳遞到指向某些內存在創建線程之前分配)。

相比之下,boost:thread的構造函數按值接受一個可調用的類,並且該類中的所有非靜態變量在線程複製後都變爲線程局部變量。我看不出爲什麼我想要使用boost :: thread_specific_ptr優先於類成員,而不是我想在OOP代碼中使用全局變量。

我是否可怕地誤解了任何東西?請舉一個非常簡短的例子。非常感謝。

回答

2

thread_specific_ptr只是簡單地提供便攜式線程本地數據訪問。你不必通過Boost.Thread來管理你的線程以從中獲得價值。典型的例子是一個在升壓文檔該類專利:

一個例子是C errno變量, 用於存儲從標準 C庫的功能相關的錯誤代碼 。它是用於該編譯器支持 多線程應用程序,以提供 錯誤號 爲每個線程的一個單獨的實例(由POSIX需要和 )常見的做法,爲了避免 不同線程競爭來讀取或更新 的值。

+0

只是爲了增加我的2美分:它也被稱爲「線程本地存儲」,在許多優雅的多線程優化中很有用 –

+0

@安迪 - 正確。我已經看到一個例子,數值分析代碼使用線程局部隨機數發生器。 –

+0

@Steve Townsend:非常好,非常感謝您的回答。換句話說,我有什麼理由要同時使用boost :: thread和boost :: thread_specific_ptr? – Joe