2011-08-07 78 views
2

我一直在嘗試進行系統調用,並想了解set_tid_address如何工作。 bascially從我讀過的是它返回執行的程序或進程的PID。何時系統調用set_tid_address使用?

我已經測試過這與ls,但有一些命令像正常運行時間,頂端等我沒有看到set_tid_address被使用。這是爲什麼?

回答

3

clone()系統調用可以採取CLONE_CHILD_CLEARTID標誌,在child_tidptr(另一clone()參數)的值被清除和相關信號futex的喚醒子線程退出時。這用於實現pthread_join()(父線程在futex上等待)。

set_tid_address()允許在初始線程上pthread_join()。在下面的LKML線程的詳細信息:

[patch] threading fix, tid-2.5.47-A3
[patch] user-vm-unlock-2.5.31-A2

至於爲何一些程序調用set_tid_address()和別人不一樣,答案很簡單。與libpthread鏈接(直接或間接)的程序調用set_tid_addressls鏈接到librt,鏈接到libpthread,因此它運行NPTL的初始化。

+0

@ninjalj ..感謝您的信息很好知道.. – krisdigitx

0

按照Linux Programmer's Manual,set_tid_address用於:

組指針當它被完成線程ID

,則返回調用進程的PID。不幸的是,手冊含糊不清,您何時想要使用此係統調用。

無論如何,你爲什麼認爲這些命令是使用set_tid_address

+0

這就是我想知道爲什麼一些使用和一些不... – krisdigitx