CodeBlanks Logo Icon CodeBlanks

memory_order

memory_order ile bellek sıralamasını öğrenirsin.

memory_order

memory_order, atomic işlemin diğer işlemlerle görünürlük ve sıralama garantilerini belirler. Varsayılan std::memory_order_seq_cst en güçlü garantidir; tüm iş parçacıkları aynı sırayı görür. Daha zayıf sıralamalar performans kazandırır ama dikkat ister.

std::memory_order_relaxed yalnızca atomikliği garanti eder; sıralama yoktur. std::memory_order_acquire okuma sırasında önceki yazıları görür; std::memory_order_release yazma sırasındaki değişiklikleri yayımlar. Bu ikisi, üretici-tüketici senkronizasyonu oluşturur. Yeni başlayanlar seq_cst kullanmalıdır.

acquire ve release

Bir iş parçacığı store(v, std::memory_order_release) yaparsa, başka bir iş parçacığı load(std::memory_order_acquire) ile okuduğunda, yayınlayan tarafın release öncesi tüm değişikliklerini görür. Bu, üretici-tüketici senkronizasyonu kurar.

Örnek: üretici veriyi hazırlar, ready.store(true, release) yapar. Tüketici ready.load(acquire) ile true görünce verinin hazır olduğunu bilir. Bu çift, kilitsiz senkronizasyonun temelidir. Yanlış sıralama, veri yarışına yol açabilir; bu yüzden dikkatli kullanılır.

Uygulama relaxed ile store/load

std::atomic<int> a{0}; oluştur. a.store(1, std::memory_order_relaxed); ile yaz, std::cout << a.load(std::memory_order_relaxed); ile oku ve yazdır. <atomic> başlığını ekle.

Başlangıç kodu

main.cpp
#include <iostream>
#include <atomic>

int main() {
    // atomic oluştur, relaxed ile store/load
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>
#include <atomic>

int main() {
    std::atomic<int> a{0};
    a.store(1, std::memory_order_relaxed);
    std::cout << a.load(std::memory_order_relaxed);
    return 0;
}

Beklenen çıktı

1

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 memory_order sabitini tamamla

Soru
std::atomic<int> a{0};
a.store(1, std::____);
Cevap
std::atomic<int> a{0};
a.store(1, std::memory_order_relaxed);

Açıklama: memory_order_relaxed yalnızca atomikliği garanti eder.

2 memory_order_relaxed ne garanti etmez?

  • Atomikliği
  • İşlem sıralamasını Doğru cevap
  • Tür güvenliğini
  • Bellek boyutunu

Açıklama: relaxed yalnızca atomikliği garanti eder; sıralama yoktur.

3 Sıralamayı amacına eşle

Kavram Anlamı
memory_order_relaxed Yalnızca atomiklik
memory_order_acquire Okuma yanında görme
memory_order_release Yazma yanında yayımlama
memory_order_seq_cst En güçlü garanti

İleri seviye bölümündeki tüm dersler