3

条件変数で時限待機を使用する pthread コードをいくつか作成しましたが、相対的な待機を確実にするために、pthread_condattr_setclock() を使用して condvar のクロック タイプを CLOCK_MONOTONIC に設定しました。

RHEL4 で pthread_condattr_setclock() をコンパイルしてリンクするには、gcc コマンド ラインに -I/usr/include/nptl と -L/usr/lib/nptl を追加する必要がありました。私の理解では、2.6 カーネル (RHEL4 にある) はデフォルトで NPTL pthread 実装を使用しますが、この機能を使用するためにこれらのパスを明示的に指定する必要があるのはなぜですか?

これを行う必要があるのはこの関数だけです。省略した場合、余分なパスを指定しなくても、すべてが正常にコンパイルおよびリンクされます (ただし、コードの動作は正しくありません)。

4

1 に答える 1

1

私が見つけたものから、/usr/include と /usr/lib のそれぞれの pthread ヘッダーとライブラリは古い LinuxThreads 実装であり、私の推測では、それらは下位互換性のために存在します (つまり、古いインターフェースに対してビルドする必要があります)。 ) ただし、実行時には NPTL 実装が使用されます (これには、LinuxThreads インターフェースのスーパーセットであるインターフェースがあります)。

したがって、新しい NPTL インターフェースが必要であることがわかっている場合 (つまり、追加の機能が必要な場合) にのみ、NPTL インターフェースを使用できます。

于 2010-03-02T09:32:57.930 に答える