C and C++


CONCURRENCY.LOCK.TWICE : 二度のロック

要旨

既にロックされている状態でロックを取得しようとしています。これはデッドロックもしくは未定義動作の原因となります。

プロパティ

クラス名 Locked Twice
日本語クラス名 二度のロック
クラス分類 信頼性 (reliability)
ニーモニック CONCURRENCY.LOCK.TWICE
カテゴリー
MisraC2023 MisraC2023:22.18 Non-recursive mutexes shall not be recursively locked
Misra2012 Misra2012:22.18 Non-recursive mutexes shall not be recursively locked
CWE CWE:764 Multiple Locks of a Critical Resource
JPL JPL:9 Place restrictions on the use of semaphores and locks.
対応言語 C および C++ で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで無効になっています。チェックを有効にするにはプロジェクト設定ファイル (configuration file)に以下の WARNING_FILTER ルールを追加してください。
WARNING_FILTER += allow class="Locked Twice"

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

以下の関数により引き起こされます。

#include <pthread.h>

pthread_mutex_t LockA;
pthread_mutex_t LockB;

void LOCK_TWICE(void){
    pthread_mutex_lock(&LockA);
    pthread_mutex_lock(&LockB);
    pthread_mutex_lock(&LockA); /* 'Locked Twice' warning issued here */
                                /* 'Double Lock' warning also issued if enabled */
    /* ... operate on locked data */
    pthread_mutex_unlock(&LockA);
    pthread_mutex_unlock(&LockB);
}

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

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