ライブラリの「MT-安全」レベル
マルチスレッドプログラムから呼び出される可能性のあるルーチンは、どれも「MT-安全」であるべきです。したがって、同時に呼び出される可能性のあるルーチンは、並行実行されても正しく実行されることが必要です。このため、マルチスレッドプログラムで使用するすべてのライブラリインタフェースは、「MT-安全」でなければなりません。
現状では、すべてのライブラリが「MT-安全」ではありません。次の表に、よく使用される「MT-安全」なライブラリを示します。これらのライブラリは、/usr/lib ディレクトリにあります。
表 7–3 「MT-安全」なライブラリの例
ライブラリ
|
コメント
|
libc
|
安全でないインタフェースの「スレッド安全」形式には、対応する「*_r」(セマンティクスが異なることが多い) 形式の「スレッド安全」なインタフェースがある
|
libm
|
System V Interface Definition 第 3 版、X/Open および ANSI C に準拠した数学ライブラリ
|
libmalloc
|
領域を効果的に使用するメモリーの割り当てライブラリ。malloc(3MALLOC) を参照
|
libmapmalloc
|
mmap を使用した代替メモリー割り当てライブラリ。mapmalloc(3MALLOC) を参照
|
libnsl
|
TLI インタフェース、XDR、RPC クライアントとサーバー、netdir、netselect、および getXXbyYY インタフェースは安全ではないが、対応する getXXbyYY_r 形式のスレッド安全なインタフェースがある
|
libresolv
|
ドメインネームサーバーのライブラリルーチン
|
libsocket
|
ネットワーク接続用のソケットライブラリ
|
libX11
|
X11 ウィンドウシステムライブラリルーチン
|
libCrun
|
Sun C++ 5.0 コンパイラ用の C++ 実行時共有オブジェクト
|
libCstd
|
Sun C++ 5.0 コンパイラ用の C++ 標準ライブラリ
|
libiostream
|
Sun C++ 5.0 コンパイラ用の古典的 iostream ライブラリ
|
libC.so.5
|
Sun C++ 4.0 コンパイラ用の C++ 実行時および iostream ライブラリ
|
「スレッド安全ではない」ライブラリ
「MT-安全」であることが保証されていないライブラリのルーチンを、マルチスレッドプログラムから安全に呼び出すためには、それらの呼び出しがシングルスレッドで行われるようにしなければなりません。