.\" Copyright (c) 1998 Alex Nash .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" %Id: pthread_rwlock_rdlock.3,v 1.1 1998/09/07 19:01:43 alex Exp % .\" .\" $FreeBSD$ .Dd August 4, 1998 .Dt PTHREAD_RWLOCK_RDLOCK 3 .Os .Sh 名称 .Nm pthread_rwlock_rdlock , .Nm pthread_rwlock_tryrdlock .Nd 読込み用に読み書きロックを取得 .Sh 書式 .Fd #include .Ft int .Fn pthread_rwlock_rdlock "pthread_rwlock_t *lock" .Ft int .Fn pthread_rwlock_tryrdlock "pthread_rwlock_t *lock" .Sh 解説 .Fn pthread_rwlock_rdlock 関数は、 .Fa lock が書込み用に設定されておらず、 書込みスレッドがロックでブロックされていない場合、読込みロックを .Fa lock で取得します。読込みロックをすぐに取得できない場合、呼び出しスレッドはロック を取得できるようになるまでブロックされます。 .Pp .Fn pthread_rwlock_tryrdlock 関数は同じアクションを実行しますが、ロックをすぐに取得できなくても ( 書込み用にロックされているか、書込みスレッドが待機していても ) ブロックされません。 .Pp 1つのスレッドは、複数の読込みロックを同時に取得できます。この場合は .Fn pthread_rwlock_unlock をそれぞれのロックに 1 回ずつ呼び出す必要があります。 .Pp 呼び出しスレッドが書込みロックを取得している場合に読込みロックを 取得しようとすると、結果は不定になります。 .Sh システムの注意事項 書込み側の飢餓状態を避けるため、書込み側は読込み側より優先されます。 .Sh 戻り値 問題がない場合、 .Fn pthread_rwlock_rdlock 関数と .Fn pthread_rwlock_tryrdlock 関数はゼロを戻します。問題がある場合は、そのエラーを示すエラー番号を戻します。 .Sh 関連項目 .Xr pthread_rwlock_init 3 , .Xr pthread_rwlock_trywrlock 3 , .Xr pthread_rwlock_unlock 3 , .Xr pthread_rwlock_wrlock 3 .Sh 規格 .Fn pthread_rwlock_rdlock 関数と .Fn pthread_rwlock_tryrdlock 関数は、 .St -susv2 .Sh エラー .Fn pthread_rwlock_tryrdlock 関数は、以下のような場合にエラーとなります。 .Bl -tag -width Er .It Bq Er EBUSY 書込み側がロックしているかブロックされているため、ロック を取得できない場合。 .El .Pp .Fn pthread_rwlock_rdlock 関数と .Fn pthread_rwlock_tryrdlock 関数は、 以下のような場合にエラーになる場合があります。 .Bl -tag -width Er .It Bq Er EAGAIN .Fa lock に対する読込みロックの最大数を越えたため、ロックを取得できない場合。 .It Bq Er EDEADLK 現在のスレッドが、書込み用にロックをすでに取得している場合。 .It Bq Er EINVAL .Fa lock で指定されている値が正しくない場合。 .It Bq Er ENOMEM メモリが不足しているため、ロックを初期化できない場合 ( 静的に 初期化されるロックのみに適用 ) 。 .El .Sh 歴史 .Fn pthread_rwlock_rdlock 関数は、 .Fx 3.0 に追加されました。