1. 程式人生 > >關於執行緒號的一些總結

關於執行緒號的一些總結

由於本人才疏學淺,本文難免存在遺漏之處,歡迎大家留言指正,本人將感激不盡。 強調內容

一、執行緒號的獲取

首先,我們要知道一個程序可能包含多個執行緒,每個執行緒都有自己的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(輕量級程序)即為執行緒。