CodeBlanks Logo Icon CodeBlanks

C++ memory model

C++ memory model ve atomic temellerini öğrenirsin.

C++ memory model

C++ bellek modeli, iş parçacıklarının belleğe nasıl eriştiğini ve hangi koşullarda tutuarlı sonuçlar elde edileceğini tanımlar. Standart kütüphanedeki std::atomic<T> şablonu her erişimin bölünmez (atomik) olmasını sağlar.

Örnek: std::atomic<int> counter{0};. Burada counter.store(5) yazma, counter.load() okuma yapar. Aynı anda iki iş parçacığı erişse bile yarış oluşmaz; değer her zaman tutarlı kalır. Bu, çok iş parçacıklı programların temel taşıdır.

Atomik erişim

Her iş parçacığının belleğe kendi görünümü vardır; eşzamanlama olmadan bir iş parçacığı diğerinin yazdığını görmeyebilir. std::atomic bu sorunu çözer: her okuma ve yazma bölünmezdir.

Örnek: bir iş parçacığı counter.store(7) yapar, diğeri counter.load() çağırır. Atomik erişim sayesinde yük ya eski 0 değerini ya da yeni 7 değerini görür; asla yarım bir değer okumaz. Ayrıca fetch_add ile oku-değiştir-yaz tek bölünmez adımda yapılır.

Uygulama Atomik counter kullan

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

Başlangıç kodu

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

// counter atomik değişkenini buraya tanımla

int main() {
    // counter'a değer ata ve yazdır
    return 0;
}

Örnek çözüm

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

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

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

Beklenen çıktı

7

Soru ve cevaplar

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

1 C++ bellek modeli neyi tanımlar?

main.cpp
std::atomic<int> counter{0};
  • Yalnızca değişken boyutları
  • Çok iş parçacıklı bellek erişimini Doğru cevap
  • Derleyici sürümlerini
  • Sınıf üye sıralarını

Açıklama: Bellek modeli, iş parçacıklarının belleğe nasıl eriştiğini ve neyin tutarlı olduğunu tanımlar.

2 Atomik değişkeni tamamla

Soru
std::atomic<int> ____;  // ready bayrağı
Cevap
std::atomic<int> ready;  // ready bayrağı

Açıklama: ready atomik bayrağı böyle tanımlanır.

3 Parçayı rolüne eşle

Kavram Anlamı
std::atomic<int> Atomik erişim
thread T(func) İş parçacığı başlatma
x.store(5) Atomik yazma
x.load() Atomik okuma

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