多線程編程之pthread線程深刻理解
Pthread
是 POSIX threads 的簡稱,是POSIX的
線程標準。
前幾篇博客已經能給你初步的多線程概念。在進一步學習線程同步等多線程核心知識以前,需要對多線程深刻的理解。很是多人忽略或者回避這部份內容,直接的問題是學習者沒法把握多線程編程的內在原理,理解的層次太淺。
1.進程資源:
進程資源有存儲資源與其它資源。其它資源包括環境變量。地址,文件等。存儲資源。進程的內存分配,博客【C解析之三】C語言的內存分配具備很是好的參考價值。
多線程進程有所不一樣:編程
靜態區:存儲全局變量和靜態變量
堆區:動態分配區
上述靜態區。堆區以及其它資源統稱爲進程的共享資源。共享資源被該進程的所有線程所共享。
線程堆:線程本身維護的堆
線程棧:線程本身維護的棧
上述的線程堆,線程棧是每個線程獨有的資源。線程間相互獨立,不共享。當創建一個線程時。系統會爲線程分配堆棧。
你可能已經發現,線程共享進程堆的同一時候。還本身維護一個堆棧。
2.線程私有數據:
多線程編程下。進程的全局變量經過存儲於共享數據區,實現爲所有線程 共用。同一時候,線程還可以有本身的全局變量,稱爲線程的私有數據。
愛思考的讀者可能會問,那線程的非全局變量在哪呢。別忘了非全局變量的空間在棧中哦。多線程
3.線程消亡:
線程消亡時,線程自由的線程堆棧會被釋放,歸還給系統,同一時候線程的私有數據也會被釋放。線程的共享資源。靜態區。共享的進程堆以及其它資源。由於這些資源是線程間共享的。故不會隨線程消亡而釋放。
需要特別注意的是。線程堆與共享的進程堆之間的差別。
線程理解至此。以後的進一步學習。會有更深刻的體會。