linux下的執行緒ID和程序ID

2021-09-27 09:14:19 字數 1365 閱讀 4933

在描述執行緒id和程序id之前我們先來分清楚幾個概念:

1. 使用者級執行緒和核心級執行緒

什麼是使用者級執行緒?

使用者級執行緒核心的切換由使用者態程式自己控制核心切換,不需要核心干涉,少了進出核心態的消耗,但不能很好的利用多核cpu,目前linux pthread大體是這麼做的。

執行緒組id?

執行緒組的id和主線程id保持一致

執行緒組的特點?

執行緒組內的第乙個執行緒,在使用者態被稱為主線程(main thread),在核心中被稱為group leader。

核心在建立第乙個執行緒時,會將執行緒組的id的值設定為第乙個執行緒的執行緒id,group_leader指標則指向自身,即主線程的程序描述符。

即執行緒組內存在乙個執行緒,執行緒id等於程序id,該執行緒被稱為主線程。

下來我們通過例項來看一下執行緒id和程序id以及執行緒組

4. 獲取執行緒id函式

核心級執行緒id ——syscall()

#include

pid_t tid;

tid = syscall(sys_gettid);

使用者態執行緒id ——-pthread_self()

#include 

pthread_t pthread_self(void);

返回值:成功返回0,失敗返回錯誤碼

例項:

#include 

#include

#include

#include

#include

#include

void* thread_run(void* arg)

}int main()

while(1)

return

0;}

結果:程序id、使用者級執行緒id、核心級執行緒id

執行緒組id

linux下程序名和程序id的轉換

1.由程序名得到程序id pidof xx 其中xx是程序名 2.由程序id得到程序名 readlink proc exe,其中 是程序的id 3.如果是shell程式,因為shell的程序名是相應的shell名,所以不能直接根據shell指令碼的名字來獲取其程序id,可以由以下兩種方法 以sh為例...

linux 執行緒id 與程序id對應關係

linux 中的執行緒是基於程序實現的,每個執行緒都會有乙個程序對應,通過gettid 可以獲取到該程序id。另外,通過pthread self 獲取到的是posix thread id。下面簡單舉個例子。include include include include include include...

linux 下獲取執行緒ID

linux多執行緒環境下gettid pthread self 兩個函式都獲得執行緒id,但這2個id有所不同 gettid是核心中的執行緒的id posix thread id可以在乙個程序內唯一標識乙個執行緒,但如果放到系統範圍內的話就得用gettid了。include 需要包含這個標頭檔案in...