ライブラリの「MT-安全」レベル
マルチスレッドプログラムから呼び出される可能性のあるルーチンは、どれも「MT-安全」であるべきです。
つまり、同時に呼び出される可能性のあるルーチンは、並行実行されても正しく実行されることが必要です。このため、マルチスレッドプログラムで使用するすべてのライブラリインタフェースは、「MT-安全」でなければなりません。
現状では、すべてのライブラリが「MT-安全」ではありません。代表的な「MT-安全」ライブラリを 表 6–3に示します。
その他のライブラリも、最終的には「MT-安全」なものに修正されます。
表 6–3 「MT-安全」なライブラリの例
ライブラリ
|
コメント
|
lib/libc
|
安全ではないインタフェースには、対応する「*_r」(セマンティクスが異なることが多い)
形式の「スレッド安全」なインタフェースがある
|
lib/libdl_stubs
|
静的スイッチのコンパイルをサポート
|
lib/libintl
|
国際化ライブラリ
|
lib/libm
|
System V Interface Definition 第 3 版、X/Open
および ANSI C に準拠した数学ライブラリ
|
lib/libmalloc
|
領域を効果的に使用するメモリーの割り当てライブラリ。malloc(3X) のマニュアルページを参照
|
lib/libmapmalloc
|
mmap(2) を使用した代替メモリー割り当てライブラリ。mapmalloc(3X) のマニュアルページを参照
|
lib/libnsl
|
TLI インタフェース、XDR 、RPC クライアントとサーバー、netdir、netselect、および getXXbyYY
インタフェースは、安全ではないが、対応する getXXbyYY_r 形式の「スレッド安全」なインタフェースがある
|
lib/libresolv
|
スレッド固有の errno に対応
|
lib/libsocket
|
ネットワーク接続用のソケットライブラリ
|
lib/libw
|
複数バイトロケールをサポートするワイド文字とワイド文字列の関数
|
lib/straddr
|
ネットワーク名をネットワークアドレスに変換するライブラリ
|
lib/libX11
|
X11 ウィンドウシステムライブラリルーチン
|
lib/libC
|
C++ 実行時共有オブジェクト
|
「スレッド安全ではない」ライブラリ
「MT-安全」であることが保証されていないライブラリのルーチンを、マルチスレッドプログラムから安全に呼び出すためには、それらの呼び出しがシングルスレッドで行われるようにしなければなりません。