C and C++


CONCURRENCY.C_ATOMIC.MO : Risky Atomic Memory Order

要旨

A function call specifies an atomic memory order that is not memory_order_seq_cst.

Checks for this warning class apply to the stdatomic.h functions that have explicit atomic memory order (memory_order) parameters.

プロパティ

クラス名 Risky Atomic Memory Order
日本語クラス名 Risky Atomic Memory Order
クラス分類 信頼性 (reliability)
ニーモニック CONCURRENCY.C_ATOMIC.MO
カテゴリー
MisraC2023 MisraC2023:21.25 All memory synchronization operations shall be executed in sequentially consistent order
Misra2012 Misra2012:21.25 All memory synchronization operations shall be executed in sequentially consistent order
CWE CWE:821 Incorrect Synchronization
対応言語 C および C++ で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで無効になっています。チェックを有効にするにはプロジェクト設定ファイル (configuration file)に以下の WARNING_FILTER ルールを追加してください。
WARNING_FILTER += allow class="Risky Atomic Memory Order"

#include <stdatomic.h>

_Atomic int avar;

void c_atomic_mo( void ) {
    int nvar = 1;

    atomic_init(&avar, nvar+1);

    nvar += atomic_load(&avar);                                  /* ok: atomic_load() uses memory_order_seq_cst implicitly */

    nvar += atomic_load_explicit(&avar, memory_order_seq_cst);   /* ok: call specifies memory_order_seq_cst explicitly */

    /* 'Risky Atomic Memory Order' warning issued on following line
     * - call specifies memory_order_relaxed
     */
    nvar += atomic_load_explicit(&avar, memory_order_relaxed);

    /* 'Risky Atomic Memory Order' warning issued on following line
     * - call specifies memory_order_relaxed
     */
    atomic_store_explicit(&avar, nvar, memory_order_relaxed);
}

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

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