歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Linux多線程編程

Linux多線程編程

日期:2017/3/1 10:20:28   编辑:Linux編程

作為多任務實現的一種機制,多線程應用得非常廣泛,相對於多進程,多線程不僅運行效率高,而且還可以提高系統資源的使用效率。雖然網上關於多線程的講解已經有一大堆,但出於學習的心態,有必要在這裡做一下筆記。

一、多線程編程常用函數

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:條件變量

Copyright © Linux教程網 All Rights Reserved