多線程開發經驗總結 未完

1.    儘量不要使用線程外部傳入的內存指針

       如果線程運行期內使用了一個外部傳入的內存指針,這是十分危險的。因爲外部內存指針何時釋放,你是無法知道的。如果外部內存指針在線程運行期內提前釋放了,

那麼將特別容易造成程序崩潰。 

       這一點說起來十分簡單,可是到了程序裏面,大量的程序代碼、邏輯結構交織在一起,再想看清楚線程間使用內存的關係,就比較困難了。

       爲了理清線程使用的內存是否爲外部傳入可以從兩個方面入手:

       A.  線程的傳入參數, 因爲線程傳入參數一般只是一個指針。那麼就要分析清楚這個傳入指針所指的內存是誰申請的,在什麼時候釋放。

       B.  避免全局函數的調用,在線程不要再調用全局函數,全局函數如何分配內存完全不可知。


2.   如果必須使用外部內存與其它線程進行通信,那麼要確保外部內存的生命週期 大於 線程運行期

當兩個線程通信時,如果採用了生產者-消費者這樣的模型,一般來說大家不容易忘記這一點,因爲一般會先創建該模型,然後在運行線程,最後在線程都結束後再釋放。

可如果沒有采用這樣的多線程模型,比如直接在全局開闢了一塊內存,讓多線程共享,這就比較麻煩了,經常容易出現因內存訪問錯誤的問題。

       爲此,建議對於多線程需要共享的內存,進行統一管理。創建一個對象管理器,來管理需要共享的內存。然後控制該對象管理器的生命期一定要 大於 共享該內存的多個線程。




寫在後面:

        需要閱讀一些服務器程序,特別是它是如何處理在多線程之間共享內存的,特別是與業務邏輯進行結合的時候。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章