我有一個與Linux中線程實(shí)現(xiàn)有關(guān)的查詢。Linux沒有顯式線程支持。在用戶空間中,我們可能使用線程庫(例如NPTL)來創(chuàng)建線程。現(xiàn)在,如果我們使用NPTL,它支持1:1映射。內(nèi)核將使用該clone()函數(shù)來實(shí)現(xiàn)線程。假設(shè)我創(chuàng)建了4個線程。那么就意味著:將會有4個task_struct。在內(nèi)部task_struct,將根據(jù)克隆參數(shù)提供共享資源(CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND)。現(xiàn)在我有以下查詢:4個線程是否具有相同的PID?如果有人可以詳細(xì)說明,則如何共享PID。如何識別不同的線程;有一些TID(線程ID)概念嗎?
3 回答

LEATH
TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個贊
使用PID和TGID(線程組ID)標(biāo)識線程。他們還知道哪個線程是誰的父級,從本質(zhì)上講,一個進(jìn)程與它啟動的任何線程共享其PID。線程ID的通常是由線程庫本身(如并行線程,等...)進(jìn)行管理。如果啟動了4個線程,則它們應(yīng)該具有相同的PID。內(nèi)核本身將處理線程調(diào)度等,但是該庫將用于管理線程(它們是否可以運(yùn)行,取決于您對線程連接和等待方法的使用)。
注意:這來自我對內(nèi)核2.6.36的回憶。我在當(dāng)前內(nèi)核版本中的工作在I / O層中,因此我不知道從那以后是否已更改。

小怪獸愛吃肉
TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超1個贊
Linux為fork()
系統(tǒng)調(diào)用提供了復(fù)制進(jìn)程的傳統(tǒng)功能。Linux還提供了使用clone()
系統(tǒng)調(diào)用創(chuàng)建線程的功能。但是,Linux不能區(qū)分進(jìn)程和線程。
添加回答
舉報
0/150
提交
取消