在作業系統原理的術語中,執行緒是程序的一條執行路徑。執行緒在unix系統下,通常被稱為輕量級的程序,執行緒雖然不是程序,但卻可以看作是unix程序的表親,所有的執行緒都是在同一程序空間執行,這也意味著多條執行緒將共享該程序中的全部系統資源,如虛擬位址空間,檔案描述符和訊號處理等等。但同一程序中的多個執行緒有各自的呼叫棧(call stack),自己的暫存器環境(register context),自己的執行緒本地儲存(thread-local storage)。 乙個程序可以有很多執行緒,每條執行緒並行執行不同的任務。可會合(joinable):這種關係下,主線程需要明確執行等待操作,在子執行緒結束後,主線程的等待操作執行完畢,子線
程和主線程會合,這時主線程繼續執行等待操作之後的下一步操作。主線程必須會合可會合的子執行緒。在主線程的執行緒函
數內部呼叫子執行緒物件的wait函式實現,即使子執行緒能夠在主線程之前執行完畢,進入終止態,也必須執行會合操作,否
則,系統永遠不會主動銷毀執行緒,分配給該執行緒的系統資源也永遠不會釋放。
**示例:#include int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *),*arg);
:gcc編譯加-lpthread#include #include #include #include #include #include void *thread_func1(void *args);
void *thread_func2(void *args);
int main (int argc,char * ar**)
if (pthread_attr_setstacksize(&thread_attr,120*1024))
if (pthread_attr_setdetachstate(&thread_attr,pthread_create_detached))
pthread_create(&tid,&thread_attr,thread_func1,null);
printf("pthread_create func1 successful!\n");
pthread_create(&tid,null,thread_func2,null);
printf("pthread_create func2 successful!\n");
pthread_attr_destroy(&thread_attr);
printf("destroy pthread_addr successful!\n");
pthread_join(tid,null);
printf("destroy pthread_addr successful!\n");
printf("i am doing something in the main func!\n");
return 0;
}void *thread_func1(void *args)
return 0;
}void *thread_func2(void *args)
如果乙個資源會被不同的執行緒訪問修改,那麼我們把這個資源叫做臨界資源,那麼對於該資源訪問修改相關的代
碼就叫做臨界區。
互斥鎖
pthread_mutex_init()
linux多執行緒
linux下為了多執行緒同步,通常用到鎖的概念。posix下抽象了乙個鎖型別的結構 ptread mutex t。通過對該結構的操作,來判斷資源是否可以訪問。顧名思義,加鎖 lock 後,別人就無法開啟,只有當鎖沒有關閉 unlock 的時候才能訪問資源。它主要用如下5個函式進行操作。1 pthre...
linux多執行緒
執行緒標識 就像每個程序都有乙個id一樣,執行緒也有自己的id。程序id用pid t來表示,他是乙個unsigned int。程序id用pthread t來表示,pthread t不能把它當整數處理。程序可以通過pthread self 函式獲得自身的執行緒id。執行緒建立 在程序中只有乙個控制線程...
Linux多執行緒
一 執行緒的特點 1.執行緒是程序的乙個執行流,是cpu排程和分配的基本單位。執行緒是程式執行的最小單位。2.執行緒不會影響到其它執行緒的執行。比如乙個執行緒崩潰,其它執行緒正常執行。3.同一程序內的執行緒共享程序的位址空間。二 乙個執行緒的組成 1.乙個指向當前被執行指令的指令指標 2.乙個棧空間...