C and C++


CONCURRENCY.LOCK.NESTED : ロックのネスト

要旨

ロック取得中に別のロックを取得しようとしています。

プロパティ

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

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

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

#include <pthread.h>

pthread_mutex_t LockA;
pthread_mutex_t LockB;

void nested_locks(void){
    pthread_mutex_lock(&LockA);
    pthread_mutex_lock(&LockB);    /* 'Nested Locks' warning issued here */
    /* ... operate on locked data */
    pthread_mutex_unlock(&LockB);
    pthread_mutex_unlock(&LockA);
}

注釈

同時に二つ以上のロックを持つスレッドが存在しなければ、デッドロックは起こりません。

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

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