linux中線程的基本相關知識

在大型的工程中,使用線程並行處理數據能夠明顯加快運行處理速度,添加一個線程主要有以下幾個步驟:

(1)、創建線程,pthread_create;

(2)、初始化互斥鎖,pthread_mutex_init;

(3)、申請互斥鎖,pthread_mutex_lock;

(4)、釋放互斥鎖,pthread_mutex_unlock;

(5)、等待線程結束,pthread_join;

(6)、線程退出,pthread_exit;

一般創建的副線程裏面的參數需要從主線程中傳入,參數的傳遞過程主要做法爲:在主線程中定義一個關於副線程的結構體,裏面定義各種副線程需要用到的參數以及相關的結構體,然後在主線程中將參數傳入到結構體中,最後在創建線程的時候將定義的結構體一併傳入到副線程中,因此相關的參數也就傳遞到了副線程中,一般來說,類的傳遞,數組的傳遞都需要指針傳遞。

線程中的互斥鎖,一般是爲了提供對共享資源的訪問保護,即在同一時間段內,共享資源只有一個線程就可以訪問。

鎖的初始化主要分爲靜態與動態兩種情況:

(1)、對於靜態分配的互斥量,可以設置爲PTHREAD_MUTEX_INITIALIZER,或者是pyhtead_mutex_init;

(2)、對於動態分配的互斥量,在申請內存後(malloc),通過pthread_mutex_init進行初始化,在釋放內存錢(free)需要使用pthread_mutex_destroy;

返回值:成功則返回0,錯誤返回錯誤編號。

對共享資源的訪問,需要對互斥量進行加鎖操作,如果互斥量已經上鎖,調用線程會阻塞,直到互斥量解鎖,在完成了對共享資源的訪問後,需啊喲對互斥量進行解鎖操作。簡單的來說,就是比如定義一個共享變量A,在線程1中對A進行訪問之前需要對A進行加鎖操作,訪問結束後解鎖A,在訪問A的這段時間內,如果線程2也需要訪問A,這時在線程2中也對A進行加鎖操作,實際上線程2運行到這一部分的時候,由於線程1中A的訪問並沒有結束,因此線程2會被阻塞,相當於sleep一段時間,直到線程1中A的訪問結束,在線程1中對A進行解鎖操作,直到這一部分結束後,線程2纔可以訪問A,同理,線程2在訪問A的時候線程1也是同樣的操作。

在主線程中加上等待線程結束這一句後,主線程這句後面的程序會等到線程結束後處理,如果在副線程中加上線程退出後,程序會跳轉到等待線程結束這行程序,然後繼續後面的程序操作。


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