2012-02-14 6 views
3

たとえば、ある命令(たとえば、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の半分は、コンテキストスイッチの前に読み取ることができ、その後残りの半分?あるいは、共有変数への読み書きアクセスが常に原子的に行われることが保証されていますか?私はこの規格に関する声明をスタンダードで見つけることはできません。

+1

いいえ、それは悪い考えです... – Mysticial

+0

@Mysticial:これは悪い考えであれば、これは標準がここで原子性を保証していないことを意味しますか? – bitmask

+1

これは正しいです。手動で保護する必要があります。 – Mysticial

答えて

0

いいえ、いいえ。このコードはリソースの競争につながります。

+0

どちらの質問にも「いいえ」と答えることはできますか?私は彼らが互いに排他的だと思った。詳しく教えてもらえますか? – bitmask

+0

それは意味の強化だった)))私はアセンブリの研究から覚えているように、このような操作は原子的ではないと思う)) – mikithskegg

関連する問題