プログラムのパフォーマンス解析

ロック lint の概要

ロックおよびその使用法の解析において、ロック lint は一般的なデータ競合 (変数にアクセスする際に、適切なロックを獲得できないなど) の原因を検出します。

表 5-1表 5-2 および 表 5-3 に、ロック lint が認識する Solaris および POSIX libthread API の ルーチンの一覧を示します。

表 5-1 排他ロック

Solaris 

POSIX 

Kernel (Solaris のみ) 

mutex_lock

mutex_unlock

mutex_trylock

pthread_mutex_lock

pthread_mutex_unlock

pthread_mutex_trylock

mutex_enter

mutex_exit

mutex_tryenter

表 5-2 読み取り書き込みロック

Solaris 

Kernel (Solaris のみ) 

rw_rdlock, rw_wrlock

rw_unlock

rw_tryrdlock, rw_trywrlock

 

 

rw_enter

rw_exit

rw_tryenter

rw_downgrade

rw_tryupgrade

表 5-3 条件変数

Solaris 

POSIX 

Kernel (Solaris のみ) 

cond_broadcast

cond_wait

 

 

cond_timedwait

 

cond_signal

pthread_cond_broadcast

pthread_cond_wait

 

 

pthread_cond_timedwait

 

pthread_cond_signal

cv_broadcast

cv_wait

cv_wait_sig

cv_wait_sig_swap

cv_timedwait

cv_timedwait_sig

cv_signal

さらに、ロック lint は表 5-4 に示す型も認識します。

表 5-4 ロック構造

Solaris 

POSIX 

Kernel (Solaris のみ) 

mutex_t 

rwlock_t 

pthread_mutex_t 

 

kmutex_t 

krwlock_t 

ロック lint は、解析対象であるモジュールに関するいくつかの基本情報の報告を行います。

ロック lint はアプリケーションについてのアサーションを指定するためのサブコマンドを提供します。解析段階において、ロック lint はアサーションの違反を報告します。


注 -

プログラムを拡張する際には、新しいアサーションを追加し、解析フェーズを 実行してそのアサーションに改善を加え、その結果確立された プログラムのロック規則を新しいコードが違反しないように留意すべきです。