線程的直觀定義
線程對於函數就類似於進程相對於程序,後者爲前者提供了運行的環境。線程使得很多函數可以在同一進程內併發執行。創建進程pthread_create(頭文件
#include <pthread.h>
)int pthread_create( pthread_t *thread, #指向pthread_t類型的變量指針 pthread_attr_t *attr, #指向pthread_attr_t類型的變量指針或者空指針 void *(*func)(void*) , #指向線程所運行的函數的指針 void *arg #傳遞給func的參數 );
掛起調用線程直至指定線程終止pthread_join
int pthread_join( pthread_t thread, #等待的線程 void* *retval #指向線程返回值的變量 )
在線程中使用互斥量來進行同步
pthread_mutex_t counter_lock = PYHREAD_MUTEX_INITIALIZER; #聲明互斥量 pthread_mutex_lock(&counter_lock); #互斥量加鎖 pthread_mutex_unlock(&counter_lock); #互斥量解鎖
線程只能傳遞給函數一個參數,可以用結構體的方式來隱式傳遞多個參數
線程條件變量的使用
#include <pthread.h> int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex) /*本函數會將線程掛起知道另一個線程通過條件變量發出消息。函數先自動釋放指定的鎖,然後等待條件變量變化, 返回原線程後互斥量自動重新上鎖*/
#include <pthread.h> int pthread_cond_signal(pthread_cond_t *cond) /*通過條件變量發消息,若有多個線程都在等待,則只喚醒其中一個線程*/
防止殭屍線程:獨立線程(detached threads)
一些場景如web服務器並不需要等待線程返回,但如果不使用pthread_join回收線程資源的話會導致殭屍線程,因此這種場景可以使用結束後自動釋放資源的獨立線程/*creating a detached thread*/ pthread_t t; pthread_attr_t attr_detached; pthread_attr_init(&attr_detached); pthread_attr_setdetached(&attr_detached,PTHREAD_CREATE_DETACHED); pthread_create(&t,&attr_detached,func,arg);
Unix/Linux編程實踐教程筆記【chap14】
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.