ATOMIC Directive • Atomic directive chỉ ra rằng một địa chỉ bộ nhớ phải được cập nhật một cách nguyên tử. • Cú pháp atomic directive: #pragma omp atomic new-line expression-stmt • Expression statement phải có dạng: • • • x += expr (+; -; *; /; >>; <<) x++ ++x x---x
• Hạn chế: – Atomic directive chỉ áp dụng cho 1 câu lệnh – Một câu lệnh atomic phải có một cú pháp nhất định
FLUSH directive • Cú pháp: • #pragma omp flush (list) newline • Giả sử có nhiều thread cùng sử dụng một dữ liệu chung được chia sẻ. Trong đó, các thread có thể thay đổi giá trị của dữ liệu chung đó. • Vấn đề: Khi 1 thread thay đổi giá trị dữ liệu thì dữ liệu đã được cập nhật đến các Thread khác
FLUSH directive • Có 2 dạng Flush directive: – Flush directive with list – Flush directive without list
Kết quả • Thread 0: read data • Thread 1: process data • data = 2
• // omp_flush_without_list. c #include <omp. h> int x, *p = &x; void f 1(int *q){ *q = 1; #pragma omp flush // x, p, and *q are flushed // because they are shared and accessible // q is not flushed because it is not shared. }