Solaris 動的トレースガイド

相互排他ロックプローブ

相互排他ロック」は、クリティカルセクションの相互排他を行います。あるスレッドから、mutex_lock(3C)pthread_mutex_lock(3C)を使って、別のスレッドが保持している相互排他ロックを獲得できます。このとき、ロックを獲得しようとしているスレッドは、ロックを所有しているスレッドが別の CPU 上で実行されているかどうかを確認します。ロックの所有スレッドが別の CPU 上で実行されている場合、ロックを獲得しようとしているスレッドは、相互排他ロックが使用可能な状態になるまでしばらく「スピン」して待機します。所有スレッドが別の CPU 上で実行されていない場合、ロックを獲得しようとしているスレッドは「ブロック」されます。

表 31–1 に、相互排他ロック関連の 4 種類の plockstat プローブを示します。それぞれの arg0 には、相互排他ロックを表す mutex_t または pthread_mutex_t 構造体 (型はすべて同じ) のポインタが入ります。

表 31–1 相互排他ロックプローブ

mutex-acquire

相互排他ロックの獲得後すぐに起動する保持イベントプローブ。arg1 には、獲得したロックが再帰型相互排他ロックで再帰的に機能するかどうかを示すブール値が入ります。arg2 には、ロックを獲得しようとしているスレッドがこの相互排他ロック上でスピンする回数が入ります。この相互排他ロックの獲得時に mutex-spin プローブが起動している場合にのみ、arg2 にはゼロ以外の値が入ります。

mutex-block

保持されている相互排他ロックでスレッドがブロックされる前に起動する競合イベントプローブ。1 回のロック獲得で mutex-blockmutex-spin の両者が起動することもあります。

mutex-spin

保持されている相互排他ロックでスレッドがスピンを開始する前に起動する競合イベントプローブ。1 回のロック獲得で mutex-blockmutex-spin の両者が起動することもあります。

mutex-release

相互排他ロックの解放後すぐに起動する保持イベントプローブ。arg1 には、このイベントが再帰型相互排他ロックでの再帰的な解放に当たるかどうかを示すブール値が入ります。

mutex-error

相互排他処理でエラーが発生したときに起動するエラーイベントプローブ。arg1 には、発生したエラーの errno 値が入ります。