Linux之執行緒概念(pthread)

2021-10-19 14:30:31 字數 3681 閱讀 5929

執行緒概念:(1)輕量級的程序,乙個程序內部可以有多個執行緒,預設情況下乙個程序只有乙個執行緒。(2)執行緒是最小的執行單元,程序是最小的系統資源分配單位。(3)核心實現都是通過clone函式實現,執行緒也有自己的pcb。

檢視pthread庫版本命令:

~$ getconf gnu_libpthread_version

nptl 2.23

1.建立執行緒

#include

#include

#include

void

*thr

(void

*arg)

intmain()

pthread_self() :函式獲得自身執行緒id

編譯:gcc file.name -lpthread

#create by ** 2021.2.21

srcfiles=$(wildcard *

.c)targetfiles=$(patsubst %

.c,%

,$(srcfiles)

)all:$(targetfiles)%:

%.cgcc -o $@ $<

-lpthread -g

clean:

-rm -f $(targetfiles)

2.執行緒退出pthread_exit(): 執行緒退出函式。執行緒退出注意事項:

exit代表退出整個程序

3.執行緒**

int pthread_join(pthread_t thread, void **retval);

執行緒**函式–阻塞等待**

例項:

#include

#include

#include

void

*thr

(void

*arg)

intmain()

輸出:

~$ gcc pthread_rtn.c -lpthread

~$ ./a.out

i am a thread,tid=140591370012416

i am a thread,tid=140591370012416

ret exit with 101

4.殺死執行緒

pthread_cancel()函式

原型:int pthread_cancel(pthread_t thread);

#include

#include

#include

void

*thr

(void

*arg)

return

null;}

intmain()

輸出:

~$ gcc pthread_cancel.c -lpthread

~$ ./a.out

i am a thread,keep running still be canceled!tid=140291370272512

i am a thread,keep running still be canceled!tid=140291370272512

i am a thread,keep running still be canceled!tid=140291370272512

i am a thread,keep running still be canceled!tid=140291370272512

i am a thread,keep running still be canceled!tid=140291370272512

ret exit with -1

5.執行緒分離

如果乙個執行緒呼叫pthread_detach()執行緒分離(自動**機制),就不能再呼叫pthread_join()函式進行執行緒**了。

示例:

#include

#include

#include

#include

void

*thr

(void

*arg)

intmain()

return0;

}

輸出:

~$ gcc pthread_detach.c -lpthread

~$ ./a.out

join err:22,invalid argument

pthread_equal()函式:比較兩個執行緒是否相等。

int pthread_equal(pthread_t t1, pthread_t t2);

有可能linux未來執行緒id pthread_t型別被修改為結構體實現。

6.建立多執行緒

#include

#include

#include

void

*thr

(void

*arg)

intmain()

for(i=

0; i<

5; i++

)return0;

}

輸出:

~$ gcc npthreads.c -lpthread

~$ ./a.out

i am 0 thread,self=139840462472960

i am 1 thread,self=139840454080256

i am 2 thread,self=139840377059072

i am 3 thread,self=139840368666368

i am 4 thread,self=139840360273664

i == 0, ret == 100

i == 1, ret == 101

i == 2, ret == 102

i == 3, ret == 103

i == 4, ret == 104

7.執行緒屬性

;//摧毀屬性

return0;

}

Linux 執行緒的概念

我們先來看看什麼是執行緒?舉個例子 乙個工廠,工廠裡有很多的生產線。此時程序就是這個工廠,而執行緒就是就是工廠中的一條生產線。執行緒與程序 1.執行緒就是乙個執行流,建立乙個執行緒就是在核心中建立乙個pcb,這個pcb指向了程序的虛擬位址空間。所以真正去執行 的是每乙個程序內部的執行流,也就是執行緒...

linux 之執行緒基礎 一 執行緒的基本概念

現代作業系統os引入了多工的概念,傳統上多工的實現是多程序完成的。支援多工就涉及到程序的切換,也就意味著程序上下文的切換。如果我們程序有很多,多程序的頻繁切換,每次上下文切換都要做這些事,還是很耗資源的,我們想用一種機制能減少程序切換帶來的資源消耗,所以很多作業系統中都引入了輕量級的程序的概念。也稱...

Linux之執行緒

一 執行緒標識 每個執行緒有乙個執行緒id。程序id在整個系統中是唯一的,但執行緒id不同,執行緒id只有在它所屬的程序環境中有效。執行緒id用pthread t資料型別來表示,可以用乙個結構來代表pthread t資料型別。include int pthread equal pthread t t...