5 Eylül 2017 Salı

Atomic İşlemler

Giriş
Atomic işlemler 3 başlık altında toplanabilir.
  1. sequentially-consistent ordering (memory_order_seq_cst), 
  2. relaxed ordering (memory_order_relaxed).
  3. acquire-release ordering (memory_order_consume, memory_order_acquire, memory_order_release, and memory_order_acq_rel), 
Sequentially Consistent Ordering
Anlaması en kolay model bu. Tüm thread'ler atomic bir işlemi tek bir thread yapmış gibi görür. Sıra bozulmaz.

Relaxed Ordering
Bu modelde, bir adamın elinde liste olsa ve listeden yeni bir elemen istesek ya yeni bir eleman ya da az evvel verdiği aynı elemanı verir. Açıklamayı OpenMP'den aldım ancak hemen hemen aynı şeyi açıklıyor.
...threads have access to a place to store and to retrieve variables, called the memory. In addition, each thread is allowed to have its own temporary view of the memory. ... The temporary view of memory allows the thread to cache variables and thereby to avoid going to memory for every reference to a variable.
Açıklaması şöyle
“Relaxed” atomic operations are not synchronization operations even though, like synchronization operations, they cannot contribute to data races.

Acquire Release Ordering
Örnek yaz

atomic_flag
std::atomic_flag yazısına taşıdım.


Hiç yorum yok:

Yorum Gönder