C and C++


CONCURRENCY.LOCK.MISMATCH : ロック/アンロックのミスマッチ

要旨

ロックのリリース順序が不適切です。 好ましいリリース順序はロックが取得された順番と逆の順序になります。 新たなロックは古いロックもよりも前にリリースされるべきです。

ロックのリリース順序が不適切の場合、システムによっては優先順位逆転を引き起こします。

プロパティ

クラス名 Lock/Unlock Mismatch
日本語クラス名 ロック/アンロックのミスマッチ
クラス分類 スタイル (style)
ニーモニック CONCURRENCY.LOCK.MISMATCH
カテゴリー
CWE CWE:662 Improper Synchronization
  CWE:710 Improper Adherence to Coding Standards
JPL JPL:9 Place restrictions on the use of semaphores and locks.
対応言語 C および C++ で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで無効になっています。チェックを有効にするにはプロジェクト設定ファイル (configuration file)に以下の WARNING_FILTER ルールを追加してください。
WARNING_FILTER += allow class="Lock/Unlock Mismatch"

ワーニングを引き起こす関数

以下の関数で引き起こされます。

#include <pthread.h>

pthread_mutex_t L1;
pthread_mutex_t L2;

void mismatched_locks(){
    pthread_mutex_lock(&L1);
    pthread_mutex_lock(&L2);
    /* ... operate on locked data */
    pthread_mutex_unlock(&L1); /* 'Lock/Unlock Mismatch' warning issued here */
    pthread_mutex_unlock(&L2); /* 'Lock/Unlock Mismatch' warning issued here */
}

関連のある設定ファイルパラメータ

設定ファイルの以下のパラメータがこのワーニングクラスのチェックに影響します。