我有一個C++應用程序,我在其中創建pthread以運行用戶提供的功能。我希望能夠在線程退出時以某種方式發出警報,以便我可以從我用來保持線程的pthread數組中移除它。有沒有辦法做到這一點,或者該功能是否應該設置一些「魔法值」。因爲我產生pthread的主代碼是一種runloop,所以我可以輕鬆地檢查退出條件。pthread退出時運行函數
此外,正在使用std::vector<pthread_t>
overdoing來跟蹤我的線程是否超載?線程的數量不一定是任何常數,許多線程或很少可以運行。或者是否有另一個STL容器適合這些添加和刪除(總是在一端添加,幾乎在任何地方刪除)。有沒有其他的結構來跟蹤pthreads?堆棧或列表是否在這裏?還是一個標準的C陣列,慷慨的最大好處?由於問題的性質,我還可以維護一個固定大小的工作線程數組,我向其傳遞必須執行的用戶函數。這是一個好的解決方案嗎?
對不起,長期以來困惑的問題,但我只使用動態語言的線程,這永遠不會是一個問題。
EDIT(12年3月8日): 閱讀@ jojojapan的回答後,我決定使用某種形式的線程池。在我的結構中,我有一個生產者(runloop中的一個線程)和許多消費者(池中的工作線程)。是否有爲多線程單生產者許多消費者使用的數據結構?或者我只是使用std::queue
和pthread_mutex_t
就可以了?你可能要考慮
當你說「運行用戶提供的功能」,你是誰寫的線程funcs? – Duck 2012-03-08 04:27:34
動態語言?你的意思是GC語言;)。 – 2012-03-08 04:28:59
@Duck:不,我正在寫一個庫,使用它的程序員寫這些函數。 – Linuxios 2012-03-08 13:52:27