pthread_condattr_setpshared() - プロセス共用条件変数属性の設定

標準

標準/拡張機能 C/C++ 依存項目

Language Environment 拡張機能
Single UNIX Specification、バージョン 3

両方 z/OS® V1R2

形式

#define _OPEN_THREADS
#define _OPEN_SYS_MUTEX_EXT
#include <pthread.h>

int  pthread_condattr_setpshared(pthread_condattr_t *attr,
                                 int pshared);
SUSV3:
#define _UNIX03_THREADS
#define _OPEN_SYS_MUTEX_EXT
#include <pthread.h>

int  pthread_condattr_setpshared(pthread_condattr_t *attr,
                                 int pshared);

機能説明

条件変数属性オブジェクト attr の属性 pshared を設定し ます。

条件変数属性オブジェクト (attr) は、作成時に条件変数に使 用する一組の値を定義することによって、ユーザーがアプリケーション内で条件変数 の特性を管理できるようにしています。 条件変数属性オブジェクトを確立することにより、条件変数ごとに特性を定義する ことなく、同じ一連の特性をとるいくつかの条件変数を作成することができます。attr を 使用することにより、条件変数のプロセス共用値を定義することができます。

属性 pshared の有効な値は次のとおりです。
説明
PTHREAD_PROCESS_SHARED
複数プロセスで共用されるメモリーに条件変数が割り振られている場合でも、 条件変数が割り振られているメモリーにアクセスできるスレッドによる条件変数の操 作を許可します。
PTHREAD_PROCESS_PRIVATE
条件変数を初期化したスレッドと同じプロセス内に作成されたスレッドだけ が条件変数を操作できます。異なるプロセスの複数のスレッドがこのような条件変数を操作しようとす ると、条件変数を初期化するプロセスだけが実行されます。 親プロセスによって新しいプロセスが作成されると、新しいプロセスは専用条件変 数の別のコピーを受け取ります。このコピーは、子プロセスのスレッド間のシリアライ ズにだけ使用されます。
注: これは、pshared のデフォルト値です。

戻り値

正常に実行された場合は、0 が戻されます。 正常に実行されなかった場合は、-1 が戻され、errno 値が設定されます。 以下は、errno の値です。
説明
EINVAL
attr に指定された値は無効です。

Single UNIX Specification、バージョン 3 の特殊な動作: 正常に実行されなかった場合、pthread_condattr_setpshared() はエラーを示すエラー番号を戻します。

使用上の注意

pthread_cond_t オブジェクトは同じコンパイル単位内で定義および初期化する ようにお勧めします。 初期化される pthread_cond_t オブジェクトを移動させる場合、初期化コードは、 そのオブジェクトを定義するコードと同じ _OPEN_SYS_MUTEX_EXT フィーチャー設定値で コンパイルされたことを確認してください。

以下の手順を実行すると、ストレージ・オーバーレイが起きて、結果は予測不能に なる可能性があります。
  1. _OPEN_SYS_MUTEX_EXT フィーチャーの #define なしで pthread_cond_t オブジ ェクトを (共用ストレージ内で) 宣言または定義する。 作成された pthread_cond_t オブジェクトは標準サイズ (すなわち、小さい) で、 _OPEN_SYS_MUTEX_EXT フィーチャーは定義されません。
  2. pthread_cond_t オブジェクトを、共用オブジェクトとして初期化するために、 _OPEN_SYS_MUTEX_EXT フィーチャーを定義してコンパイルされた別のコード単位に渡す。 pthread_cond_t 初期化では、一般的に以下のステップが実行されます。
    1. pthread_condattr_init()
    2. pthread_condattr_setpshared()。 このステップは、pthread_cond_t の属性を PTHREAD_PROCESS_SHARED と設定し、そ のオブジェクトを拡張サイズと指定します。
    3. pthread_cond_init()。 このステップは、渡された (小さい) pthread_cond_t オブジェクトを拡張オブジェ クトであるかのように初期化し、ストレージ・オーバーレイを起こします。

関連情報