(zz)Linux多線程編程技術總結

1、線程的創建、終止及控制:

任何進程在啓動時就已有了一個主線程,如果需要再生成線程則使用pthread_create函數,在該函數中可以指定線程的屬性、線程例程、傳給線程例程的參數。線程例程是一個用戶自定義的函數,及線程執行的代碼。當線程例程返回時,線程則結束運行,也可以顯示調用pthread_exit來退出。線程在創建後可以用pthread_self函數獲取線程ID。函數pthread_join使得進程等待線程的終止,調用pthread_join後進程將被掛起,直到指定的某個線程(在pthread_join的參數thread中指定)終止。而pthread_detach函數正好相反,它使得進程不必等待線程的結束,從而允許進程繼續執行別的操作,被detach的線程在執行結束後其佔用的資源由系統自動收回。

2、線程間的互斥:

互斥操作 ,就是對某段代碼或某個變量修改的時候只能有一個線程在執行這段代碼,其他線程不能同時進入這段代碼或同時修改變量。pthread常用pthread_mutex互斥體來實現線程互斥操作。pthread_mutex_init函數用於初始化一個互斥體變量。pthread_mutex_lock函數用於給互斥體變量上鎖,如果上鎖時互斥體已經被被的線程鎖住了,那麼調用該函數的線程將被阻塞直到互斥體被解鎖爲止。而pthread_mutex_trylock則是試圖鎖住互斥體,但在互斥體已經被加鎖時不會造成阻塞,而是迅速返回。pthread_mutex_unlock函數對互斥體解鎖。pthread_mutex_destroy則用來釋放互斥體所佔資源。

3、線程的同步:

同步就是若干個線程等待某個事件的發生,當該事件發生時,一起開始繼續執行。在Linux線程中用條件變量來實現同步。函數pthread_cond_init用來創建一個條件變量。pthread_cond_waitpthread_cond_timewait用來等待條件變量被設置,值得注意的是這兩個等待調用需要一個已經上鎖的互斥體mutex,這是爲了防止在真正進入等待狀態之前別的線程有可能設置該條件變量而產生競爭。pthread_cond_broadcast用於設置條件變量,即使事件發生,並使得所有等待該事件的線程不再阻塞。而pthread_cond_signal則是用解除某一個等待線程的阻塞狀態。pthread_cond_destroy用來釋放一個條件變量的資源。

4、生產者——消費者多線程技術實現:

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