Linux 多執行緒

2021-09-18 02:01:55 字數 1904 閱讀 4746

在作業系統原理的術語中,執行緒是程序的一條執行路徑。執行緒在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);
**示例:

#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)

:gcc編譯加-lpthread

如果乙個資源會被不同的執行緒訪問修改,那麼我們把這個資源叫做臨界資源,那麼對於該資源訪問修改相關的代

碼就叫做臨界區

互斥鎖

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.乙個棧空間...