關於執行緒號的一些總結
阿新 • • 發佈:2019-01-06
由於本人才疏學淺,本文難免存在遺漏之處,歡迎大家留言指正,本人將感激不盡。 強調內容
一、執行緒號的獲取
首先,我們要知道一個程序可能包含多個執行緒,每個執行緒都有自己的id。獲取執行緒id存在下面兩種方法:
1、pthread_t pthread_self(void):
其中返回值型別為pthread_t,型別的定義如下所示:
typedef unsigned long int pthread_t
注意,pthread_self獲取的執行緒id只是在該執行緒所屬的程序內有用,程序內部可以通過pthread_self獲取的id來區分執行緒,並且在不同程序內的執行緒可能存在相同的由pthread_self所獲取的id,系統無法用此id來區分執行緒。
2、pid_t gettid(void):
返回型別為pid_t,實際上pid_t為int型別。
在Linux中程序id型別也為pid_t,所以我們可以看到,在linux 中執行緒其實是通過程序來實現的。
通過gettid()獲取的id在整個系統內都是可見的,每個執行緒都具有獨一無二的由gettid獲取的id。
gettid用法舉例
#include <sys/syscall.h>
printf("%d %d\n", getpid(), syscall(SYS_gettid)); //通過系統呼叫使用
二、命令列檢視某個程序的所有執行緒
bash> ps -p 105357 -T
PID SPID TTY TIME CMD
105357 105357 pts/18 00:00:00 ta
105357 105358 pts/18 00:00:00 ta
此處獲取程序105357的所有執行緒,可以看到該程序有兩個執行緒,105357和105358,其中105357為主執行緒。
三、獲取系統內的所有執行緒
bash> ps -Lef | grep 105357
UID PID PPID LWP C NLWP STIME TTY
wen 105357 98076 105357 0 2 13:47 pts/18 00:00:00 ./ta
wen 105357 98076 105358 0 2 13:47 pts/18 00:00:00 ./ta
wen 105412 104637 105412 0 1 13:51 pts/19 00:00:00 grep --color=auto 105357
可通過命令ps -Lef獲取所有執行緒,其中列LWP(輕量級程序)即為執行緒。