読み取り / 書き込みロック によって、保護された共有資源に対する並行する複数の読み取りと排他的な書き込みが可能になります。読み取り / 書き込みロックは単一のの実体で、読み取りまたは書き込みモードでロック可能です。資源を変更するには、スレッドはまず排他的な書き込みロックを獲得する必要があります。排他的に書き込みロックは、全ての読み取りロックが解放されるまで有効になりません。
データベースへのアクセスは読み取り / 書き込みロックに同期させることができます。読み取り操作によってレコードの情報が変更されることはないので、読み取り / 書き込みロックではデータベースのレコードを並行して読み取ることができます。データベースを更新する場合、書き込み操作は排他的な書き込みロックを獲得しなければなりません。
デフォルトの読み取り / 書き込みロック属性を変更するには、属性オブジェクトを宣言し、これを初期化しなければなりません。読み取り / 書き込みロック属性はアプリケーションのコードの開始位置にまとめて設定してある場合が多いので、その場所を素早く見つけて簡単に修正できます。ここで説明した読み取り / 書き込みロック属性を操作する関数を、次の表に示します。
読み書きロックに関する Solaris スレッドの実装については、「pthread に相当するものがある同期関数 - 読み取り / 書き込みロック」 を参照してください。
表 4-8 読み取り / 書き込みロック属性のルーチン
#include <pthread.h> int pthread_rwlockattr_init(pthread_rwlockattr_t *attr);
pthread_rwlockattr_init(3T) は、読み取り / 書き込みロック属性オブジェクト attr の、実装によって定義されたすべての属性を、デフォルト値に初期化します。
初期化済みの読み取り / 書き込みロック属性オブジェクトを指定して pthread_rwlockattr_init を呼び出した場合、その結果は未定義です。読み取り / 書き込みロック属性オブジェクトを使って初期化された読み取り / 書き込みロックは、属性オブジェクトに影響を与えるどんな関数(削除を含む)の影響も受けないためです。
正常終了時は 0 です。それ以外の戻り値は、エラーが発生したことを示します。
#include <pthread.h> int pthread_rwlockattr_destroy(pthread_rwlockattr_t *attr);
pthread_rwlockattr_destroy(3T) は、読み取り / 書き込みロック属性オブジェクトを削除します。削除したオブジェクトを、pthread_rwlockattr_init() の呼び出しによって再び初期化する前に使った場合、その結果は未定義です。実装によっては、pthread_rwlockattr_destroy() は、 attr が参照するオブジェクトに不正な値を設定する場合もあります。
正常終了時は 0 です。それ以外の戻り値は、エラーが発生したことを示します。
#include <pthread.h> int pthread_rwlockattr_setpshared(pthread_rwlockattr_t *attr, int pshared);
pthread_rwlockattr_setpshared(3T) は、プロセス共有の読み取り / 書き込みロック属性を設定します。
PTHREAD_PROCESS_SHARED
読み取り / 書き込みロックが割り当てられているメモリーにアクセスできるすべてのスレッドに、読み取り / 書き込みロックの操作を許可します。複数のプロセスによって共有されているメモリに置かれた読み取り / 書き込みロックに対しても有効です。
PTHREAD_PROCESS_PRIVATE
読み取り / 書き込みロックを操作できるのは、そのロックを初期化したスレッドと同じプロセス内で作成されたスレッドだけです。異なるプロセスのスレッドから読み取り / 書き込みロックを操作しようとした場合、その結果は未定義です。プロセス共有の属性のデフォルト値は、PTHREAD_PROCESS_PRIVATE です。
正常終了時は 0 です。それ以外の戻り値は、エラーが発生したことを示します。
#include <pthread.h> int pthread_rwlockattr_getpshared(const pthread_rwlockattr_t *attr, int *pshared);
pthread_rwlockattr_getpshared(3T) は、プロセス共有の読み取り / 書き込みロック属性を取得します。
pthread_rwlockattr_getpshared() は、attr が参照する初期化済みの属性オブジェクトから、プロセス共有の属性の値を取得します。
正常終了時は 0 です。それ以外の戻り値は、エラーが発生したことを示します。