17 Mart 2016 Perşembe

std::atomic_thread_fence

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.

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