Директива ATOMIC действует аналогично директиве CRITICAL, но относится только к идущему непосредственно за ней атомарному оператору, гарантируя корректную работу с общей переменной, стоящей в левой части оператора присваивания.
C/C++:
#pragma omp atomic
Fortran:
!$OMP ATOMIC
Пример программы:
Программа atomic.c
#include <stdio.h> #include <omp.h> #define MAX 8 int main() { int count = 0; #pragma omp parallel num_threads(MAX) { #pragma omp atomic count++; } printf("Number of threads: %d\n", count); }