omp atomic ディレクティブは、アトミックに更新しなければならない、また複数の同時書き込みスレッドに公開してはならない、特定のメモリー・ロケーションを識別します。
>>-#--pragma--omp atomic--+-----------+------------------------>< '-statement-'
ここで、statement は、以下に続くいずれかの形式をとるスカラー型の式ステートメントです。
statement | 条件 |
---|---|
x bin_op = expr | ここで、
|
x++ | |
++x | |
x-- | |
--x |
ロードおよび保管の操作は、オブジェクト x に対してのみアトミックです。expr の評価は、アトミックではありません。
プログラム内の指定オブジェクトに対するすべてのアトミック参照は、 互換タイプを持っていなければなりません。
並列更新が可能で、競合状態の対象となる可能性のあるオブジェクトは、omp atomic ディレクティブで保護する必要があります。
extern float x[], *p = x, y;
/* Protect against race conditions among multiple updates. */ #pragma omp atomic x[index[i]] += y;
/* Protect against races with updates through x. */ #pragma omp atomic p[i] -= 1.0f;