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

ライブラリの「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 クライアントとサーバ、netdirnetselectgetXXbyYY インタフェースは安全ではない。ただし、getXXbyYY_r 形式のインタフェースは 「スレッド安全 」

lib/libresolv

スレッド固有の errno をサポート

lib/libsocket

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

lib/libw

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

lib/straddr

ネットワーク名前アドレス変換ライブラリ 

lib/libX11

X11 ウィンドウライブラリルーチン 

lib/libC

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

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

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