たとえば、ある命令(たとえば、32ビットアーキテクチャの64ビット整数)で、基礎となるプロセッサがアクセスできない変数があるとします。OpenMP共有変数が原子的に読み書きされると仮定できますか?
// let x, y, z of the same integral type of size > architecture
#pragma omp parallel shared(x), private(y,z)
y = ...;
z = ...;
if (x == y)
x = z;
if
の文と実際の割り当ての間にレースがあるかもしれませんが、x
の半分は、コンテキストスイッチの前に読み取ることができ、その後残りの半分?あるいは、共有変数への読み書きアクセスが常に原子的に行われることが保証されていますか?私はこの規格に関する声明をスタンダードで見つけることはできません。
いいえ、それは悪い考えです... – Mysticial
@Mysticial:これは悪い考えであれば、これは標準がここで原子性を保証していないことを意味しますか? – bitmask
これは正しいです。手動で保護する必要があります。 – Mysticial