ライブラリの「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、Edition 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-安全」であることが保証されていないライブラリのルーチンを、マルチスレッドプログラムから安全に呼び出すためには、それらの呼び出しがシングルスレッドで行われるようにしなければなりません。