#pragma omp atomic

説明

omp atomic ディレクティブは、アトミックに更新しなければならない、また複数の同時書き込みスレッドに公開してはならない、特定のメモリー・ロケーションを識別します。

構文

構文図を読む構文図をスキップする>>-#--pragma--omp atomic--+-----------+------------------------><
                          '-statement-'
 

ここで、statement は、以下に続くいずれかの形式をとるスカラー型の式ステートメントです。

statement 条件
x bin_op = expr ここで、
bin_op
は、以下のいずれかです。
+  *  -  /  &  ^  |  <<  >>
expr
は、x を参照しないスカラー型の式です。
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;