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

ライブラリの「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 クライアントとサーバー、netdirnetselect、および getXXbyYY インタフェースは、安全ではないが、対応する getXXbyYY_r 形式の「スレッド安全」なインタフェースがある

lib/libresolv

スレッド固有の errno に対応

lib/libsocket

ネットワーク接続用のソケットライブラリ

lib/libw

複数バイトロケールをサポートするワイド文字とワイド文字列の関数

lib/straddr

ネットワーク名をネットワークアドレスに変換するライブラリ

lib/libX11

X11 ウィンドウシステムライブラリルーチン

lib/libC

C++ 実行時共有オブジェクト

「スレッド安全ではない」ライブラリ

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