1. 程式人生 > >Linux 多執行緒程式設計(一)

Linux 多執行緒程式設計(一)

Linux 多執行緒程式設計

執行緒(Thread)已被許多作業系統所支援,包括Windows/NT ,Linux

以前的多執行緒其實是多程序,而現在意味著一個程序中有多個執行緒

使用多執行緒的原因(多執行緒的優點):

1.“節省”,啟動一個新的程序需要分配給它獨立的地址空間,建立眾多的資料表來維護他的程式碼段,堆疊段和資料段,這是一種“昂貴的多工操作方式”。執行在一個程序中的多個執行緒,使用相同的地址空間,執行緒間彼此切換所需時間也遠遠小於程序切換的時間執行緒開銷極大的縮小

2.執行緒間方便的通訊機制不同的程序具有獨立的資料空間,程序間通訊費時且不方便。而同一程序下的執行緒共享資料空間,所以一個執行緒的資料可以直接為其他執行緒所用,

快捷而方便。

3.使CPU系統更加有效。作業系統會保證當執行緒數不大於CPU數目時,不同的執行緒運行於不同的CPU上。

4.改善程式結構。長而複雜的程序可以考慮分為多個執行緒,成為幾個獨立或半獨立的執行部分。

Linux系統下的多執行緒遵循POSIX執行緒介面,編寫程式,使用pthread.h標頭檔案

建立執行緒

#include <pthread.h>

Int pthread_create(pthread_t  *tidp, const pthread_attr_t  *attr, void *(*start_rrtn)(void),void *arg)

tidp: 執行緒id

attr: 執行緒屬性(通常為空)

start_rtn:執行緒要執行的函式

arg:start_rtn的

終止執行緒

執行緒正常退出方式:

執行緒從啟動例程中返回

執行緒可以被另一個執行緒終止

執行緒自己呼叫跑pthread_exit函式

退出執行緒

void pthread_exit(void *rval_ptr)   //rval_ptr 執行緒退出返回的指標

執行緒等待

int pthread_join(pthread_t tid,void**rval_ptr)  //阻塞呼叫執行緒,直到指定的執行緒終止。

Tid :等待退出的執行緒id   Rval_ptr:執行緒退出的返回值的指標