===========我是怎么想到這個問題的============= 我試圖通過列印出它們的執行緒ID并查看它們來找到有關運行時某些執行緒的一些資訊的輸出ps -l -T <PID>。顯然這不起作用,因為 pthread_self() 和 gettid() 回傳不同的值。我想知道是否有辦法在 ps 命令輸出中使用 p_thread id 找到正確的執行緒條目。
列印出 pthread id 的程式的標準輸出
~/a.out
current thread id is current thread id is 139911304836672
ps 輸出
ps -l -T 80353
F S UID PID SPID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S - 80353 80353 80072 0 80 0 - 3561 futex_ pts/4 0:00 ./a.out
1 S - 80353 80354 80072 0 80 0 - 3561 hrtime pts/4 0:00 ./a.out
uj5u.com熱心網友回復:
根據 POSIX 標準,pthread_t它是一種不透明型別,僅用于使用 POSIX 執行緒 API 參考執行緒。如果您希望保持符合標準并撰寫可移植代碼,那么在該 API 之外,該型別的值不會傳達任何意義。請參閱pthread_self(3)手冊頁。
如果您閱讀了您選擇的 POSIX 執行緒庫的源代碼(可能是 NPTL [Native POSIX 執行緒庫]),您可能會找到一種方法來查找內核執行緒 id(由gettid(2)該 POSIX 執行緒庫實作的代碼,并使您的代碼對于任何未來的庫更改都很脆弱。
如果您真的需要關聯,我認為這是有原因的,那么我相信您能做的最好的事情就是自己跟蹤通信(以執行緒安全的方式)。然后,當然您的代碼是特定于 Linux 的,就像gettid(2)和執行緒 ID 的概念一樣。但至少你會在沒有任何外部假設的情況下以正確的方式使用記錄在案的 API,因此只要兩個 POSIX 執行緒 APIgettid(2)仍然存在,代碼就會繼續作業(并且你將如何使用執行緒 id 的細節仍然會以相同的方式作業) . 通過依賴記錄在案的 API,您會更容易注意到損壞。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/516467.html
標籤:linux线程
