ロック lint の主たる役割は、データ競合やデッドロックに通じる可能性のある整合性に欠けたロックの使用状況を報告することです。ロックの使用状況の解析は、analyze サブコマンドの使用時に行われます。その結果として、以下の問題が報告されます。
ロックに副作用を生じさせたり、ロックの副作用についてのアサーションに違反する関数 (たとえば、相互排他ロックの状態をロックから非ロックへと変化させる関数など)。関数がエントリにおいてロックを獲得した後、あるリターンポイントでその解放に失敗した場合などに、意図しない副作用はよく起こります。関数の中のその経路は、副作用としてロックを獲得したと言われます。この種の問題はデータ競合とデッドロックの両方につながる可能性があります。
ロックについて整合性に欠ける副作用を持ち (つまり、関数に異なるパスが存在するということ)、異なる副作用を生じる関数。これはロック lint の制限事項 (「「ロック lint の制限事項」」を参照) であり、よくあるエラーの原因です。ロック lint はこうした関数を扱うことができず、つねにエラーとしてのみ報告し、正しく解釈することはありません。たとえば、ある関数から戻ったとき、何回かに 1 度、その関数において獲得されたロックの解除を忘れてしまうこともあります。
関数のエントリにおいて、どのロックが保持されるべきかについてのアサーションの違反。この問題はデータ競合につながる可能性があります。
変数がアクセスされた時点で、ロックが保持されるべきかについてのアサーションの違反。この問題はデータ競合につながる可能性があります。
ロックが獲得される順序について指定するアサーションの違反。この問題はデッドロックにつながる可能性があります。
特定の条件変数上のすべての待機に対して、同じ (あるいはアサートされた) 相互排他ロックが使用できない。
アサーションおよびロックと関連したソースコード解析に関するその他の問題。
解析の後、ロック lint のサブコマンドによって以下の操作が可能となります。
その他のロックに関する不整合部分の発見。
適切な declare、assert、ignore サブコマンドの作成。これらの操作は、ロック lint の状態を復元した後、再度解析を行う前に指定できます。
そうしたサブコマンドの 1 つが order であり、ロックが獲得された順序に関する調査に使用できます。ロック lint が潜在的なデッドロックをより正確に診断できるように、ロックの順序に関する問題を理解し、そうした順序についてのアサーションを作成するためには、こうした情報は有効です。
さらに、同様のサブコマンドには vars があります。vars サブコマンドは、変数の読み取りまたは書き込み時 (存在する場合)、どのロックが整合性を保持するかについて報告します。保護に関する規約がもともとドキュメント化されていなかったり、古くなってしまっているコードにおいて、保護規約を確定するためには、こうした情報は有効です。