2

Linux の一部の関数は _r (例: gmtime_r ) によって「スレッドセーフ」とマークされていますが、ほとんどのシステムコールはマークされておらず、マンページにも記載されていません。私の質問は次のとおりです。Linux syscall がスレッドセーフかどうかをどのように確認できますか? ありがとうございました!

4

1 に答える 1

7

「ライブラリ関数」のことだと思います。syscalls は、スレッドのカーネル側のデータを操作するため、スレッドセーフである必要があります。

答えは、問題の関数のマニュアル ページを確認することです。「_r」バリアントは、再入不可の関数専用に提供されています。つまり、それらに渡された追加のパラメーターは、静的に宣言され、非「_r」バージョンで変更されました。

ほとんどの glibc は、IIRC、スレッドセーフであるべきですが、常にマニュアルページをチェックする必要があります。または、それらを信頼しない場合は、コード自体。プログラミング対象のインターフェースを理解する責任を取り除く特効薬はありません。

于 2012-08-19T10:00:15.707 に答える