Aracılığıyla paylaş


2.6.4 Atomik yapı

atomic Yönergesi sağlar, çoklu olasılığını sergilemek yerine, belirli bellek konumuna atomically, güncelleştirilir eşzamanlı iş parçacığı yazılıyor.Sözdizimi atomic yönergesinin değeri aşağıdaki gibidir:

#pragma omp atomic new-line
   expression-stmt

İfade deyimi aşağıdaki formlardan birinde olmalıdır:

x binop= ifade

x ++

++ x

x--

--x

Önceki ifadelerinde:

  • x skalar türü ile lvalue ifadesidir.

  • ifade skalar türü ile ifade edilir ve belirlenen nesne başvurmayan x.

  • binopfazla yüklenmiş işleç değil ve biri +, *, -, / &, ^, |, <<, veya >>.

Bunu uygulaması tüm olup yerini alır uygulama tanımlı olmasına rağmen atomic yönergeleri ile kritik aynı benzersiz olduğu yönergeleri ad, atomic yönergesi izin verir daha iyi en iyi duruma getirme.Genellikle donanım yönergeleri en az yükü Atomik güncelleştirmeyi gerçekleştirebilir.

Yalnızca yük ve belirlenen nesne deposu x yapıdadır; Değerlendirme, ifade kararlı değil.Yarış durumları önlemek için paralel konumda tüm güncelleştirmeleri ile korunması atomic yönergesi içeriyorsa, yarış ücretsiz olarak bilinen hariç.

Kısıtlamaları atomic yönergesini aşağıdaki gibidir:

  • Program boyunca depolama konumu x Atomik başvuruda türü uyumlu olması gereklidir.

Örnekler:

extern float a[], *p = a, b;
/* Protect against races among multiple updates. */
#pragma omp atomic
a[index[i]] += b;
/* Protect against races with updates through a. */
#pragma omp atomic
p[i] -= 1.0f;

extern union {int n; float x;} u;
/* ERROR - References through incompatible types. */
#pragma omp atomic
u.n++;
#pragma omp atomic
u.x -= 1.0f;