マルチスレッドのプログラミング

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