部落格6 linux中 執行緒的兩個「id」

2021-09-18 03:23:31 字數 685 閱讀 5011

內容:linux的乙個程序中可以包含多個執行緒,那麼程序的id通過getpid()得到,那麼執行緒的id要如何得到呢?

解析:執行緒的id其實有兩個,乙個是在程序內表示的id,乙個是在核心看來真正的id。

測試**:

測試結果:

結論:1.可以看到在程序中的id和在核心看來的id是不一樣的

2.在程序中的id表示只保證在此程序中是唯一的,不同程序中的執行緒id是可能相同的

3.當你給乙個程序的執行緒發生訊息,應該採取真正的執行緒id,而不是它在程序中表示的id

4.任何時刻都是唯一的,並且由於linux分配新的pid採用遞增輪迴辦法,如果對乙個執行緒**,再分配乙個執行緒,會發現這個新執行緒的id是剛才上乙個**的舊執行緒的id

5.因此:getpid()得到的是程序的pid,在核心中,每個執行緒都有自己; 要得到執行緒的pid,必須用syscall(sys_gettid); pthread_self()函式獲取的是執行緒id

執行緒建立的兩個方法

參看1.6版jdk thread類的說明 1 定義個自己的執行緒類 繼承至thread類 需要實現run方法。class primethread extends thread public void run 呼叫方式 primethread p new primethread 143 p.start...

兩個執行緒之間的通訊。。。。。

public class demo01 catch interruptedexception e thread t2 new thread catch interruptedexception e t1.start t2.start class mytask system.out.println 1...

兩個經典的執行緒安全示例分析

slf4j topic c.case1 public class case1 public static void main string args list.add t t.start 使得每個執行緒執行結束 list.foreach t catch interruptedexception e ...