memory_order_release - Sıralama İçin Kullanılır
Şöyle yapılır. std::atomic_thread_fence metoduna memory_order_release parametresi geçildiği için fence çağrısının üstündeki tüm atomic işlemler çağrının altındaki atomic işlemler'den önce yapılmak zorundadır. Yani önce x işlemi yapılmalıdır daha sonra y işlemi yapılır.
Şöyle yapılır.
Şöyle yapılır. std::atomic_thread_fence metoduna memory_order_release parametresi geçildiği için fence çağrısının üstündeki tüm atomic işlemler çağrının altındaki atomic işlemler'den önce yapılmak zorundadır. Yani önce x işlemi yapılmalıdır daha sonra y işlemi yapılır.
std::atomic<bool> x,y;
std::atomic<int> z;
void write_x_then_y()
{
x.store(true,std::memory_order_relaxed);
std::atomic_thread_fence(std::memory_order_release);
y.store(true,std::memory_order_relaxed);
}
memory_order_acquireŞöyle yapılır.
std::atomic<int> flag { 0 };
bool poll1() {
return (flag.load(std::memory_order_acquire) == 1);
}
memory_order_relaxed
Şöyle yapılır.
std::atomic<int> flag { 0 };
bool poll2() {
int snapshot = flag.load(std::memory_order_relaxed);
if (snapshot == 1) {
std::atomic_thread_fence(std::memory_order_acquire);
return true;
}
return false;
}
Hiç yorum yok:
Yorum Gönder