名称
pthread_rwlockattr_getpshared(), pthread_rwlockattr_setpshared() ― プロセス共有属性の取得と設定
構文
#include <pthread.h>
int pthread_rwlockattr_setpshared(pthread_rwlockattr_t
*attr,
int pshared);
int pthread_rwlockattr_getpshared(const pthread_rwlockattr_t
*attr,
int *pshared);
パラメータ
| attr | | 属性の設定または取得の対象とする読み書きロック属性オブジェクトへのポインター。 |
| pshared | | このパラメータは、 プロセス共有 属性の新しい値を指定する (set 関数) か、 attr の プロセス共有 属性が返されるメモリー領域を指します (get 関数)。 |
説明
属性オブジェクト attr は、これらの関数を呼び出す前に、関数 pthread_rwlockattr_init() で事前に初期化しておかなければなりません。
読み取り書き込みロックは、プロセス内のスレッドによってのみ使用することも、複数のプロセスのスレッド間で共有することもできます。
読み書きロック属性オブジェクトの プロセス共有 属性は、読み書きロックを使用できるスレッドの範囲を規定します。 プロセス共有 属性の有効な値は、次のとおりです。
| PTHREAD_PROCESS_SHARED |
| | | このオプションにより、読み書きロックは、読み書きロックが割り当てられているメモリーにアクセスできる任意のスレッドによって操作されるようになります。
アプリケーションは、複数のプロセスがアクセスできるメモリーへの読み書きロックの割り当てを処理しなければなりません。 |
| PTHREAD_PROCESS_PRIVATE |
| | | 読み書きロックは、読み書きロックを初期化したスレッドと同じプロセス内で作成されたスレッドによってのみ、操作されます。
異なるプロセスのスレッドがそのような読み書きロックを操作しようと試みた場合、動作は不定です。 |
プロセス共有 のデフォルト値は PTHREAD_PROCESS_PRIVATE です。
pthread_rwlockattr_setpshared() は、初期化済みの属性オブジェクト attr の プロセス共有 属性を設定します。 attr の新しい プロセス共有 属性値は、 pshared パラメータで指定された領域に設定されます。
pthread_rwlockattr_getpshared() は、読み書きロック属性オブジェクト attr から プロセス共有 属性値を取得します。 attr の プロセス共有 属性値は、 pshared パラメータに返されます。
戻り値
正常終了すると pthread_rwlockattr_getpshared() と pthread_rwlockattr_setpshared() は 0 を返します。
それ以外の場合、エラーの内容を表すエラー番号を返します (errno 変数は使用しません)。
エラー
以下の条件の場合、 pthread_rwlockattr_getpshared() と pthread_rwlockattr_setpshared() 関数は、該当するエラー番号を返します。
| [ENOSYS] | | _POSIX_THREAD_PROCESS_SHARED が未定義で、これらの関数がサポートされていない場合。 |
以下の条件の場合、 pthread_rwlockattr_getpshared() と pthread_rwlockattr_setpshared() 関数は、該当するエラー番号を返します。
| [EINVAL] | | attr で指定された値が無効である場合。 |
| [EINVAL] | | pshared で指定された値が無効である場合。 |
| [EINVAL] | | 値 pshared が無効なアドレスを指している場合。 |
警告
PTHREAD_PROCESS_SHARED で定義された プロセス共有 属性で読み書きロックを作成した場合、協調プロセスは、読み書きロックが割り当てられているメモリーにアクセスできる必要があります。
著者
pthread_rwlockattr_setpshared() と pthread_rwlockattr_getpshared() は、X/Open が開発しました。
標準準拠
pthread_rwlockattr_setpshared(): X/Open.
pthread_rwlockattr_getpshared(): X/Open.