執行緒概念:(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...