作為多任務實現的一種機制,多線程應用得非常廣泛,相對於多進程,多線程不僅運行效率高,而且還可以提高系統資源的使用效率。雖然網上關於多線程的講解已經有一大堆,但出於學習的心態,有必要在這裡做一下筆記。
一、多線程編程常用函數
1. int pthread_create(pthread_t * thread,const pthread_attr_t * attr,void * (*start_routine)(void *), void *arg);
作用:創建一個新線程
參數:
thread:線程ID
attr:線程屬性(包括調度策略,調度參數,堆棧地址,堆棧大小等)。一般設置為NULL,即采用系統默認屬性
void * (*start_routine):線程函數指針
*arg:線程函數參數的指針
返回值:
0:表示創建成功
其他:表示創建失敗失敗
2. int pthread_join(pthread_t th, void **thread_return);
作用:等待其他線程終止
參數:
th:需要等待的線程的ID
thread_return:所等待的線程的返回值
返回值:
0:表示成功
其他:表示失敗
3. void pthread_exit(void *retval);
作用:終止當前線程
參數:
retval:線程的返回值
4. int pthread_mutex_lock(pthread_mutex_t *mutex);
作用:上鎖,如果鎖不可用則會阻塞當前線程直到鎖可用
參數:
mutex:互斥變量
5. int pthread_mutex_unlock(pthread_mutex_t *mutex);
作用:與pthread_mutex_lock()相反
6. pthread_t pthread_self(void);
作用:返回當前線程ID
返回值:
當前線程ID
7. int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);
作用:解鎖mutex,等待條件變量cond被發出信號
參數:
cond:條件變量
mutex:互斥鎖對象
在調用此函數之前要先獲得互斥鎖,調用此函數時會自動釋放互斥鎖以防止死鎖,這就是為什麼此函數與互斥鎖聯系在一起的原因。另外此函數調用成功後當前線程會被掛起並放棄CPU,因此在等待的過程中是不會占用CPU資源的,當條件滿足(被喚醒)時會重新上鎖。
8. int pthread_cond_signal(pthread_cond_t *cond);
作用:重新開始(喚醒)正在等待條件變量cond的線程
參數:
cond:條件變量