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

_REENTRANT または _POSIX_C_SOURCE の指定

POSIX 動作を望む場合は、-D_POSIX_C_SOURCE フラグで 199506L 以上の値を指定してアプリケーションをコンパイルしてください。Solaris 動作を望む場合は、-D_REENTRANT フラグを指定してマルチスレッドプログラムをコンパイルしてください。これは、アプリケーションのすべてのモジュールに当てはまります。

混用アプリケーションの場合 (たとえば、Solaris スレッドを POSIX セマンティクスで使用する場合)、コンパイルで -D_REENTRANT フラグと -D_POSIX_PTHREAD_SEMANTICS フラグを指定します。

単一のスレッドのアプリケーションをコンパイルするときは、-D_REENTRANT-D_POSIX_C_SOURCE フラグも指定しないでください。これらのフラグを指定しなければ、errnostdio などの以前の定義がすべてそのまま効力を持ちます。


注 -

スレッドライブラリ (libthread.so.1 または libpthread.so.1) にリンクされておらず、-D_REENTRANT フラグが指定されていない、シングルスレッドのアプリケーションをコンパイルしてください。これによって、putc(3s) などのマクロが再入可能な関数呼び出しに変換されるときに生じる性能の低下が少なくなります。


要約すると、-D_POSIX_C_SOURCE が指定された POSIX アプリケーションは、表 7-1 に記載されているルーチンに関して、POSIX 1003.1c セマンティクスを持ちます。-D_REENTRANT のみが指定されたアプリケーションは、これらのルーチンに関して Solaris セマンティクスを持ちます。また、-D_POSIX_PTHREAD_SEMANTICS が指定された Solaris アプリケーションは、これらのルーチンに関して POSIX セマンティクスを持ちますが、Solaris スレッドインタフェースを使用することもできます。

-D_POSIX_C_SOURCE-D_REENTRANT の両方が指定されたアプリケーションは、POSIX セマンティクスを持ちます。