使用Linux Redhat7編寫代碼的時候,需要使用 gettid() 函數獲取線程ID。使用 man gettid 命令查看了一下,gettid()函數的頭文件是 #include<sys/types.h>, 但是導入了該頭文件以后,再使用 gettid() 函數程序在gcc編譯的時候,仍然會報 undefined reference to 'gettid'。
網上查閱資料以后發現,需要使用 syscall 的方式進行調用。所以可以用如下方式進行一個簡單的封裝,這樣就可以使用 gettid()了
#include <unistd.h> #include <sys/syscall.h> #define gettid() syscall(__NR_gettid)
或者也可以使用 pthread_self(),該函數可以獲取當前線程的線程ID。
具體為什么要這樣處理的原因還不太清楚,既然可以查到函數,並且也導入了相應的頭文件,但是還是使用失敗,具體原因后續查閱了解后再做補充。