2011-08-07 7 views
2

私はシステムコールを打ち負かそうとしており、set_tid_addressがどのように動作するのか理解したいと思っています。基本的に私が読んだことは、実行されるプログラムやプロセスのPIDを返すということです。システムコールset_tid_addressはいつ使われますか?

私はこれをlsでテストしましたが、uptime、topなどのコマンドではset_tid_addressが使用されていません。何故ですか?

答えて

3

clone()システムコールはchild_tidptr(別clone()引数)の値がクリアされることを、CLONE_CHILD_CLEARTID旗を取ることができ、関連するのfutexはとき、子スレッドが終了するウェイクアップ信号。これは、pthread_join()を実装するために使用されます(親スレッドはフューテックスで待機します)。

set_tid_address()は、最初のスレッドでpthread_join()になります。以下LKMLスレッドで詳細情報:一部のプログラムはset_tid_address()を呼び出し、他の人がいない理由として

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

、答えは簡単です。 libpthreadに(直接的または間接的に)リンクされたプログラムは、set_tid_addressを呼び出します。 lslibpthreadにリンクされているlibrtにリンクされているため、NPTLの初期化が実行されます。

+0

@ninjalj ..知っている情報に感謝.. – krisdigitx

0

Linux Programmer's Manualによれば、set_tid_addressが使用された:それが終了すると

セットポインタがID

を通すために、それが呼び出したプロセスのPIDを返します。残念なことに、実際にこのシステムコールを使用したいときは、このマニュアルではあいまいです。

いずれの場合でも、なぜこれらのコマンドがset_tid_addressを使用していると思いますか?

+0

これは、なぜ私がいくつかの使用法といくつかの理由を知りたいと思ったものです... – krisdigitx

関連する問題