Solaris 動的トレースガイド

読み取り/書き込みロックプローブ

「読み取り/書き込みロック」は、クリティカルセクション内で、「複数の読み取り」と「単一の書き込み」のいずれか一方を許可します。通常、これらのロックを使用するのは、変更されるより検索される機会のほうが多く、かつクリティカルセクション時間が十分にある構造体です。クリティカルセクション時間が短い場合、読み取り/書き込みロックは、ロックを実装するために使用された共有メモリー上で暗黙的に直列化されます。この場合、読み取り/書き込みロックは、適応型ロックと同じになります。読み取り/書き込みロックの詳細については、rwlock(9F) のマニュアルページを参照してください。

読み取り/書き込みロック関連のプローブは、表 18–4 のとおりです。これらの各プローブの arg0 には、適応型ロックに相当する krwlock_t 構造体へのポインタが格納されます。

表 18–4 読み取り/書き込みロックプローブ

rw-acquire

読み取り/書き込みロックの獲得後すぐに起動する保持イベントプローブ。arg1 には、定数 RW_READER (ロックが読み取りとして獲得された場合) または RW_WRITER (ロックが書き込みとして獲得された場合) が入ります。

rw-block

保持されている読み取り/書き込みロックでブロックされたスレッドが再起動し、このロックを獲得したあと起動する競合イベントプローブ。arg1 には、現在のスレッドがロックを獲得するまでのスリープ時間 (ナノ秒) が入ります。arg2 には、定数 RW_READER (ロックが読み取りとして獲得された場合) または RW_WRITER (ロックが書き込みとして獲得された場合) が入ります。arg3arg4 には、ブロックの原因に関する情報が入ります。現在のスレッドがブロックされたとき保持されていたロックが「書き込み」だった場合にかぎり、arg3 にはゼロ以外の値が入ります。arg4 には、現在のスレッドがブロックされたときの読み取りカウントが入ります。rw-blockrw-acquire の両方のプローブが有効になっている場合、rw-block のほうが rw-acquire より先に起動します。

rw-upgrade

スレッドが、読み取り/書き込みロックを、読み取り側から書き込み側へ正常に昇格させたあと起動する保持イベント。昇格は、ブロックしないインタフェース rw_tryupgrade(9F) でしか行うことができません。このため、昇格には競合イベントがありません。

rw-downgrade

スレッドが、読み取り/書き込みロックの所有権を、書き込み側から読み取り側へ降格したあと起動する保持イベント。降格は、常に競合なしで正常に行われます。このため、降格には競合イベントがありません。 

rw-release

読み取り/書き込みロックの解放後すぐに起動する保持イベントプローブ。arg1 には、定数 RW_READER (解放されたロックが読み取りとして保持されていた場合) または RW_WRITER (解放されたロックが書き込みとして保持されていた場合) が入ります。昇格と降格のため、ロックを獲得したとき、まだこのロックが解放されていない場合もあります。