CodeBlanks Logo Icon CodeBlanks

Özet - Bellek modeli

memory model, happens-before ve acquire-release'i birleştirerek bir sync primitive yazarsın.

Özet - Bellek modeli

Bu grupta bellek modelinin temel araçlarını gördün: std::atomic, happens-before, sequential consistency, data race ve acquire-release. Hepsi çok iş parçacıklı programların doğruluğunu sağlar.

Şimdi bunları bir atomik sayaç örneğinde birleştireceksin. store, fetch_add ve load işlemleri tek bir programda yer alacak; böylece atomik erişimin nasıl birleştiğini göreceksin.

Atomik sayaç

Bir std::atomic<int> sayaç, store ile başlangıç değeri alır, fetch_add ile bölünmez artırılır ve load ile okunur. Tüm işlemler atomik olduğu için data race oluşmaz.

Örnek: counter.store(5); counter.fetch_add(3); std::cout << counter.load();. Sonuç 8 olur. Bu örnekte fetch_add varsayılan seq_cst sırasını kullanır; tek iş parçacıklı olsa bile davranış belirlidir.

Uygulama Atomik sayacı birleştir

Global std::atomic<int> counter{0}; tanımla. main içinde counter.store(5);, counter.fetch_add(3); ve std::cout << counter.load(); yaz.

Başlangıç kodu

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

// counter atomiğini buraya tanımla

int main() {
    // counter'ı başlat, artır ve yazdır
    return 0;
}

Örnek çözüm

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

std::atomic<int> counter{0};

int main() {
    counter.store(5);
    counter.fetch_add(3);
    std::cout << counter.load();
    return 0;
}

Beklenen çıktı

8

Soru ve cevaplar

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

1 std::atomic işlemlerinin varsayılan bellek sırası nedir?

main.cpp
x.store(5);  // varsayılan
  • memory_order_relaxed
  • memory_order_seq_cst Doğru cevap
  • memory_order_release
  • memory_order_acquire

Açıklama: seq_cst varsayılan sıradır; en güçlü garantiyi verir.

2 fetch_add sırasını tamamla

Soru
counter.fetch_add(1, std::memory_order_____);
Cevap
counter.fetch_add(1, std::memory_order_relaxed);

Açıklama: relaxed yalnızca atomiklik sağlar; sıra gerekmezse yeter.

3 Aracı özelliğine eşle

Kavram Anlamı
std::atomic Bölünmez erişim
happens-before İş parçacıkları arası sıra
seq_cst Total sıra, varsayılan
acquire-release Eşleştirilmiş sıra

Uzman bölümündeki tüm dersler