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

LWP ごとの POSIX タイマ

Solaris 2.3 と 2.4 リリースでは、timer_create(3R) 関数が戻すタイマオブジェクトは、そのタイマ ID が呼び出し LWP の中だけで意味をもち、その期限切れシグナルが呼び出し LWP に送られるというものでした。このため、POSIX タイマ機能を使用できるスレッドは、結合スレッドに限られていました。

さらに、この制限された使用方法でも、Solaris 2.3 と 2.4 リリースのマルチスレッドアプリケーションでの POSIX タイマは、生成されるシグナルのマスキングおよび sigvent 構造体からの関連値の送信について信頼性に欠けるところがありました。

Solaris 2.5 以降のリリースでは、マクロ _POSIX_PER_PROCESS_TIMERS を定義してコンパイルされたアプリケーション、あるいはシンボル _POSIX_C_SOURCE に対して 199506L より大きな値を指定してコンパイルされたアプリケーションは、プロセスごとのタイマを作成できます。

Solaris 2.5 リリースより前のリリースでコンパイルされたアプリケーション、あるいは機能評価マクロを使わずにコンパイルされたアプリケーションは、引き続き LWP ごとの POSIX タイマを作成します。将来のリリースでは、LWP ごとのタイマを作成するための呼び出しが、プロセスごとのタイマを戻すようになる予定です。

プロセスごとのタイマのタイマ ID は、どの LWP からでも使用できます。期限切れシグナルは、特定の LWP に向けられるのではなく、そのプロセスに対して生成されます。

プロセスごとのタイマは、timer_delete(3R) の呼び出し時またはそのプロセスの終了時にのみ削除されます。