作為多工實現的一種機制,多執行緒應用得非常廣泛,相對於多程序,多執行緒不僅執行效率高,而且還可以提高系統資源的使用效率。雖然網上關於多執行緒的講解已經有一大堆,但出於學習的心態,有必要在這裡做一下筆記。
一、多執行緒程式設計常用函式
1. int pthread_create(pthread_t * thread,const pthread_attr_t * attr,void * (*start_routine)(void *), void *arg);作用:建立乙個新執行緒二、例項要求:在主線程裡建立兩個子執行緒,其中乙個子執行緒輸出1,3,5,7,9,另乙個子執行緒輸出2,4,6,8,10,輸出的順序是1,2,3,4,5,6,7,8,9,10。兩個子執行緒都退出後主執行緒才退出。引數:thread:執行緒id
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:條件變數
1 #include 2 #include 3 #include 456編譯後執行,結果如下://初始化互斥鎖
7 pthread_mutex_t count_mutex =pthread_mutex_initializer;8//
初始化條件變數
9 pthread_cond_t condition_var =pthread_cond_initializer;
10//
初始化計數變數
11int num = 1;12
13//
執行緒1的執行緒函式
14void *thread1(void *arg)
1527
else
28//
解鎖,等待
29 pthread_cond_wait( &condition_var, &count_mutex );
30//
解鎖31 pthread_mutex_unlock( &count_mutex );
32if(num > 10)33
return
null;34}
3536}37
38//
執行緒2的執行緒函式
39void *thread2(void *arg)
4052
else
53//
喚醒正在等待的執行緒
54 pthread_cond_signal( &condition_var );
5556
//解鎖
57 pthread_mutex_unlock( &count_mutex );
58if(num > 10)59
64}6566}67
6869
intmain()
7080
81//
建立執行緒2
82 ret = pthread_create(&t2,null,thread2,null);
83if(ret != 0
)
8487
88//
等待執行緒1結束
89 ret =pthread_join(t1,null);
90if(ret != 0)91
9495
//等待執行緒2結束
96 ret =pthread_join(t2,null);
97if(ret != 0)98
101102
return0;
103 }
Linux 多執行緒程式設計
1.建立執行緒和退出的函式原型 int pthread create pthread t thread,pthread attr t attr,void start routine void void arg pthread exit 0 其他還有很多相關的函式。2.編譯時要加上 lpthread ...
Linux多執行緒程式設計
linux 多執行緒程式設計 多執行緒支援 posix 執行緒介面,稱為 pthread,pthread create 用來建立執行緒,pthread join 等待執行緒結束,函式的原型分別如下 extern int pthread create p pthread t thread,const ...
linux 多執行緒程式設計
多執行緒的使用 典型的執行緒包括乙個執行時間系統,它可以按透明的方式來管理執行緒。通常執行緒包包括對執行緒的建立和刪除,以及對互斥和條件變數的呼叫。posix標準執行緒庫具有這些呼叫。這些包還提供執行緒的動態建立和刪除,因此,直到執行時間之前,執行緒的個數不必知道。執行緒具有乙個id 乙個堆疊 乙個...